- 思路
- 算法属性
- 代码
思路
希尔排序是插入排序的加强版,算法最开始以一定的步长进行排序,然后会继续以更小的步长进行排序,最终算法以步长为 1 进行排序。当步长为 1 时,算法变为直接插入排序,这就保证了数据一定会被全部排序。
算法属性
排序类型 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 | 复杂性 |
交换排序 | O(NlogN) | O(N^2) | O(1) | 稳定 | 简单 |
代码
public static int[] shellSort(int[] inputList) {
int size = inputList.length;
if (size == 0) {
return inputList;
}
int gap = size / 2;
while (gap > 0) {
for (int i = gap; i < size; i++) {
int j = i - gap;
int tem = inputList[i];
while (j >= 0 && inputList[j] > tem) {
inputList[j+gap]=inputList[j];
j-=gap;
}
inputList[j+gap]=tem;
}
gap /= 2;
}
return inputList;
}