希尔排序:
shellSort是对插入排序的优化,是不稳定的。
比较指定步长的数组下标的值,进行插入排序,然后缩小步长,再进行插入排序,以此类推,直到步长为1。
复杂度分析:
最优时间复杂度:根据步长序列的不同而不同
最坏时间复杂度:O(n^2)
希尔排序代码:
public static int[] shellsort(int[] arr){
int n = arr.length;
int gap = n/2;
while(gap > 0){
for(int j = gap; j < n; j++){
int i=j;
while(i >= gap && arr[i-gap] > arr[i]){
int temp = arr[i-gap]+arr[i];
arr[i-gap] = temp-arr[i-gap];
arr[i] = temp-arr[i-gap];
i -= gap;
}
}
gap = gap/2;
}
return arr;
}