您的位置:首页 > 编程语言 > Java开发

八大排序--- 希尔排序(最小增量排序)

2017-03-19 14:25 351 查看

八种排序的关系:



一、基本思想

算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。



package com.chb.sort;

/**
* 希尔排序(最小增量排序)
* 增量d=n/2的序列进行 直接插入排序
* d减小 直至d=1排序结束
*
*/
public class ShellSort {

public static void main(String[] args) {
shellSort(a);
}
static  int a[]={1,54,6,3,78,34,12,45,56,100};
public static void shellSort(int[] a){
int d = a.length;
while(true) {
d = (int) Math.ceil(d/2);
for (int i = 0; i <= d; i++) {//
//直接插入排序  j j+d j+2d ...
for (int j = i; j < a.length-d; j+=d) {
int k = j;//j以前部分已经为有序
int insertNum = a[k+d];  //要插入的数据
while(k >= j && a[k] > insertNum){
a[k+d] =a[k];
k-=d;
}//跳出循环 a[k] < insertNum,
//所以k后面的是要插入的位置
//if ((k+d)!= j) {
a[k+d] = insertNum;
//}
}
}
if (d == 1) {
break;
}
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"  ");
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 排序算法