希尔排序(java)
时间复杂度为O( n^(3/2) )
不是一个稳定的排序算法 如何看一个算法是否稳定:
{("scala",12),("python",34),("c++",12),("c",76),("java",44)}
scala和c++的值相等,排序前scala在c++的前面 如果排序后
{("scala",12),("c++",12),("python",34),("java",44),("c",76)}//scala还是在c++的前面,稳定
{("c++",12),("scala",12),("python",34),("java",44),("c",76)}//scala在c++的后面,不稳定
package com.sort.shell;
public class ShellSort {
public static void swap(int[] list, int a, int b){
int temp;
temp = list[a];
list[a] = list[b];
list[b] = temp;
}
public static void print(int list[]){
for(int i=; i<list.length; i++){
System.out.print(" "+list[i]);
}
}
/**
* {0,9,1,5,8,3,7,4,6,2}
*
* int increment = L.length-1;
* 设置一个增量increment
* increment = increment/3+1;
* increment=4
* i=5 , 从5号到9号遍历
* 让1号和5号比较,如果1号大于5号,就交换位置
* 2号和6号比较,如果2号不大于6号,就不动
* 3号和7号比较、(3-4)!> 0,结束
* 4号和8号比较 (4-4)!> 0,结束
* 5号和9号比较,发现(5-4=1)>0,就让1号和5号比较,(1-4)!>0,结束
*
* increment = increment/3+1;
* increment=2
* i=3,从3号到9号遍历
* 1号和3号比较(1-3)!> 0,结束
* 2号和4号比较
* 3号和5号比较,1号和3号比较
* 4号和6号比较,2号和4号比较
* 5号和7号比较,3号和5号比较,1号和3号比较
* 6号和8号比较,4号和6号比较,2号和4号比较
* 7号和9号比较,5号和7号比较,3号和5号比较,1号和3号比较
*
* increment = increment/3+1;
* increment = 1
* 2号到9号遍历
* 2号和1号比较
* 3号和2号比较
* .......
*
* */
public static void shellSort(int[] L){
int i,j;
int increment = L.length-;
do{
increment = increment/+; //增量序列
for(i=increment+; i<=L.length-; i++){
if(L[i] < L[i-increment]){
L[] = L[i]; // 暂存在L[0]
for(j=i-increment; j> && L[]<L[j]; j-=increment){
L[j+increment] = L[j]; //记录后移,查找插入位置
}
L[j+increment] = L[]; //插入
}
}
}while(increment > );
}
public static void sort(int[] list){
//前奏工作
int [] L = new int[list.length+];
L[] = ; // 让0号元素为作为暂存数据的位置
for(int i=; i<L.length; i++){
L[i] = list[i-];
}
shellSort(L);//进行希尔排序
//收尾工作
for(int i=; i<L.length; i++){
list[i-] = L[i];
}
}
public static void main(String[] args) {
int [] list = new int[]{,,,,,,,,};
print(list);
System.out.println();
sort(list);
print(list);
}
}
希尔排序(java)的更多相关文章
- 希尔排序及希尔排序java代码
原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序 ...
- 希尔排序java
希尔排序简述 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率.(希尔排序先将部分数据进行排序,相当于已经部分排好序) ...
- 希尔排序----java实现
思路:希尔排序是分组基础上的直接插入排序,给定的一个步长数组,每个小组先直接插入排序.虽然有四次循环,但是每次循环次数少. package com.sheepmu.text; import java. ...
- 排序---希尔排序Java
希尔排序 插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减 ...
- 冒泡排序 选择排序 插入排序希尔排序 java
双向冒泡 package com.huang; public class _014_bubb_sort { int[] b={1,2}; static int a[]={12,4,35,65,43,6 ...
- 插入排序与希尔排序Java实现
public class TestMain { public static void main(String[] args) { Integer[] a = new Integer[5000]; fo ...
- 希尔排序——Java实现
一.排序思想 希尔排序(Shell’s Sort)是插入排序的一种,是直接插入排序算法的一种更高版本的改进版本. 把记录按步长gap分组,对每组记录采用直接插入排序方法进行排序: 随着步长逐渐减小,所 ...
- 希尔排序java代码
//希尔排序 通过测试 public class ShellSortTest{ public static void shellSort(int [] arrays){ for(int d=5;d&g ...
- C数据结构排序算法——希尔排序法用法总结(转http://www.cnblogs.com/skywang12345/p/3597597.html)
希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它 ...
随机推荐
- 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了
前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...
- WinForm 天猫2013双11自动抢红包【源码下载】
1. 正确获取红包流程 2. 软件介绍 2.1 效果图: 2.2 功能介绍 2.2.1 账号登录 页面开始时,会载入这个网站:https://login.taobao.com/member/login ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
- iOS开发之ReactiveCocoa下的MVVM(干货分享)
最近工作比较忙,但还是出来更新博客了,今天给大家分享一些ReactiveCocoa以及MVVM的一些东西,干活还是比较足的.在之前发表过一篇博文,名字叫做<iOS开发之浅谈MVVM的架构设计与团 ...
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- APEX:对object中数据进行简单处理?
在Salesforce中,常常要对各种数据进行处理,已满足业务逻辑.本篇文章会介绍如何实现从object获取数据,然后将取得的数据进行一系列简单处理. 第一步:SongName__c 是一个新建的ob ...
- ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id
出现场景:当点击"分类"再返回"首页"时,发生error退出 BUG描述:Caused by: java.lang.IllegalArgumentExcep ...
- Configure a bridge interface over a VLAN tagged bonded interface
SOLUTION VERIFIED February 5 2014 KB340153 Environment Red Hat Enterprise Linux 6 (All Versions) Red ...
- FineReport关于tomcat集群部署的方案
多台服务器集群后,配置权限.数据连接.模板.定时调度等,只能每台服务器一个个配置,不会自动同步到所有服务器. 针对上述情况,在FineReport中提供新集群部署插件,将xml配置文件.finedb/ ...
- 整体二分QAQ
POJ 2104 K-th Number 时空隧道 题意: 给出一个序列,每次查询区间第k小 分析: 整体二分入门题? 代码: #include<algorithm> #include&l ...