基于插入排序的改进版,效率更高 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率
思想: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
平均时间复杂度:O( n1.3 ),空间复杂度:1,不稳
分组间隔一般取数组长度的1/2,然后再一直折半,在工程中一般就选取折半的方式来选取分组间隔
public class shell {
public void shell(){
int[] arry3={23,3,7,87,43,678,76,6,8,75,353,12,54,743,23,567,21};
for(int gap=arry3.length/2;gap>0;gap/=2) { //将数组等比例缩小分组
for (int j = gap; j < arry3.length; j++) { //数组分组个数
for (int i = j; i > gap - 1; i -= gap) { //每个分组间进行插排排序
if (arry3[i] < arry3[i - gap]) {
int temp = arry3[i];
arry3[i] = arry3[i - gap];
arry3[i - gap] = temp;
}
}
}
}
for (int i=0;i<arry3.length;i++){
System.out.print(arry3[i]+" ");
}
}
}
输出:
3 6 7 8 12 21 23 23 43 54 75 76 87 353 567 678 743