Java基础之希尔排序

来源:互联网 发布:中序遍历的递归算法 编辑:程序博客网 时间:2024/05/01 23:29

希尔排序的基本思想是:

先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。

  该方法实质上是一种分组插入方法。
  给定实例的shell排序的排序过程
  假设待排序文件有10个记录,其关键字分别是:
  49,38,65,97,76,13,27,49,55,04。
  增量序列的取值依次为:
  5,3,1

示例代码如下:

public class dayOf25_31 {
public static int[] shellSort(int[] array){
int d = array.length/2;   //步长
int length = array.length;
int i,j;
int temp;  //临时变量
while(d>0){
for(i=d;i<length;i++){
j = i-d;   //每次要重新做调整
while(j>=0){
if(array[j]>array[j+d]){
temp = array[j];
array[j] = array[j+d];
array[j+d] = temp;
j = j-d;   //array[j]还要和前面的做比较,如1,6,11,当6和11比较完了,换了位置的话,以前11位置的数还要和1位置的比较
}else{
j = -1;
}
}
}
d = d/2; //改变步长
}
return array;
}
public static void out(int[] ar){
int length = ar.length;
System.out.println("希尔排序后的结果为:");
for(int i=0;i<length;i++){
System.out.print(ar[i]+" ");
}
}
public static void main(String[] args){
int[] array = {5,3,8,11,10,32,23,9,15,2};
array = dayOf25_31.shellSort(array);
dayOf25_31.out(array);
}
}