/**
* 算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)
* 分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插
* 入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中
* 再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序
* 完成。
* @author Administrator
*
*/
public class ShellSort{
public int[] shellSort(int[] sortArray){
//在这里进行分组
int length = sortArray.length;
int d = length;
//首先要保证可以对这个数组进行无限分组,知道只有一组为止。
while(true){
//分组进行中
d = d/2;
for(int i=0;i<d;i++){
//对每个分组进行插入排序
for(int j = i+d;j < length;j+=d){
//保存这个要进行插入排序的数据
int temp = sortArray[j];
int m = j-d;
//将这组里面的所有比插入值大的数据向后移动一个单位
for(;m>=0&&sortArray[m]>temp;m-=d){
sortArray[m+d]=sortArray[m];
}
sortArray[m+d] = temp;
}
}
//对只有一组的情况下进行排序了就终止循环。
if(d==1){
break;
}
}
return sortArray;
}
//测试方法
public static void main(String[] args) {
int[] a = {10,3,4,5,6,7,1,2,9,8};
int[] result = new ShellSort().shellSort(a);
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
}
}
希尔排序(java实现)
最新推荐文章于 2023-07-14 00:21:03 发布