希尔排序
基本思想:分组的直接插入排序,是不稳定排序算法
描述:
- 将一个数据序列分成若干组,每组由若干相隔一段距离的元素组成,这段距离称为增量,在一个组内采用直接插入排序算法进行排序;
- 增量的初值一般为数据序列长度的一半,以后每趟增量逐渐减小,最后为1,当增量为1时,只有一组,元素是整个序列,在进行一趟直接插入排序即可。
代码
public static void shellSort(int[] table) {
for(int delta=table.length/2;delta>0;delta/=2){//控制增量减半
for(int i =delta;i<table.length;i++){//
int temp = table[i],j;
for(j =i- delta;j>=0&&temp<table[j];j-=delta){
table[j+delta] = table[j];
}
table[j+delta] = temp;
}
for(int k=0;k<table.length;k++){
System.out.print(table[k]+ " ");
}
System.out.println("");
}
}
三层循环
- 最外层:以增量delta变化来控制进行若干趟扫描,delta的初值为序列长度的一半,以后逐渐减半,直至为1
- 中间循环:进行一趟扫描,序列分为delta组,每组元素进行直接插入排序
- 最内层循环:每组元素相距delta远,寻找插入位置
时间复杂度:平均:o(nlogn)~o(n^2)
最好:o(n1.3),最坏:o(n2)
空间复杂度:o(1)