希尔排序
希尔排序逻辑
希尔排序是一种改进后的插入排序,
它涉及在不同的间隔之间进行子序列的插入排序,所以 希尔排序是不稳定排序
复杂度分析
平均时间复杂度:取决于具体的间隔序列
空间复杂度:O(1)
最差情况的时间复杂度是O(n^2),此时希尔排序退化为直接插入排序,即间隔为1。
最好的情况下可以达到O(n log n)
代码实现
class Main {
public static void shellSort(int[] arr) {
int len = arr.length;
// 取间隔,从arr长度的一半开始,每次减少一半
for(int mid = len / 2; mid>0 ; mid /= 2) {
// 对每个小组内进行直接插入排序(视小组前面的数是有序的,依次插入合适的位置)
for(int i = mid; i < len; i++) {
int temp = arr[i];
int j = i;
while(j >= mid && arr[j - mid] > temp) {
arr[j] = arr[j - mid];
j -= mid;
}
arr[j] = temp;
}
}
return;
}
}
使用场景
希尔排序通常用于大规模数据集的排序,尤其是当数据集中的元素分布不均匀时,传统的插入排序的性能可能较差。通过逐步缩小间隔的方式,希尔排序能够较好地提高插入排序的性能。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 IT蛋的个人博客!