排序-希尔

来源:互联网 发布:淘宝店铺标志设计尺寸 编辑:程序博客网 时间:2024/06/05 15:45

原理:不停拆分,对各个小子序列进行直接插入排序再更换步长继续排序,等基本有序后再进行一次直接插入排序。

public static int[] ShellSort(int[]a){int k;for(int i=a.length/2;i>0;i/=2){//i为步长for(int j=i;j<a.length;j++){//j为后半段int tmp = a[j];for( k=j-i;k>=0;k-=i){//k为前半段if(tmp<a[k]){a[k+i] = a[k];}else{break;}}a[k+i] = tmp;}}return a;}

看着是三重循环,第一重用来设置步长进行每次排序,j为后半段每次进1与前面的每段进行比较,也就是一个跨度为i的直接插入排序

不稳定,最好、平均时间复杂度为这里写图片描述最坏为这里写图片描述