定义:
将一个序列按照一定的“间距”分成几个子序列,把每个子序列进行插入排序,得到一个小数基本在前,大数基本在后的基本有序的序列,然后将“间距”逐渐缩小直到间距为1,最终得到一个有序的序列。
时间复杂度:O(n^3/2)
实现:
public class Shell {
public void sort(int[] arr){
int increment=arr.length;
do{
increment=increment /3+1;
for(int i=increment;i<arr.length;i++){
if(arr[i] < arr[i-increment]){
int tmp=arr[i];
int j;
for(j=i-increment;j>=0 && arr[j]>tmp;j=j-increment){
arr[j+increment]=arr[j];
}
arr[j+increment]=tmp;
}
SortUtils.print(arr);
}
//SortUtils.print(arr);
}while(increment >1);
}
public static void main(String[] args){
int[] arr=SortUtils.getArray();
Shell shell=new Shell();
shell.sort(arr);
}
}
1508

被折叠的 条评论
为什么被折叠?



