希尔排序
1 public class ShellSort { 2 public static void main(String[] args) { 3 int [] array={101,11,2,1,19,88,77,66,99,66,11}; 4 shellSort(array); 5 for(int i=0;i<array.length;i++){ 6 System.out.print(array[i]+" "); 7 } 8 } 9 10 private static void shellSort(int[] array){ 11 for(int increment=array.length/2;increment>0;increment/=2){ //找到步节点做增量排序即可 12 for(int i=increment;i<array.length;i++){ 13 int temp = array[i]; 14 int j=i-increment; 15 while(j>=0){ 16 if(temp<array[j]){ 17 array[j+increment]=array[j]; 18 }else{ 19 break; 20 } 21 j-= increment; 22 } 23 array[j+increment]=temp; 24 } 25 } 26 } 27 }
希尔排序最好时间复杂度和平均时间复杂度都是,最坏时间复杂度为
空间复杂度都为:O(1);
希尔排序是不稳定的,它的空间开销也是O(1),时间开销估计在O(N3/2)~O(N7/6)之间
浙公网安备 33010602011771号