希尔排序(Shell Sort)是一种改进的插入排序算法,其思路如下:首先,选择一个增量序列(通常为n/2,n为数组长度)来划分数组。按照增量序列的步长,对子序列进行插入排序。逐渐缩小增量序列的步长,重复上述步骤,直到增量序列为1,即对整个数组进行最后一次插入排序。
以下是希尔排序的具体步骤:
以下是希尔排序的示例代码:
public class Sort { public static void shellSort(int[] arr) { int n = arr.length; int gap = n / 2; while (gap > 0) { for (int i = gap; i < n; i++) { int temp = arr[i]; int j = i; while (j >= gap && arr[j - gap] > temp) { arr[j] = arr[j - gap]; j -= gap; } arr[j] = temp; } gap /= 2; } } public static void main(String[] args) { int[] array = {5, 2, 8, 12, 1, 6}; shellSort(array); System.out.println("排序结果:"); for (int num : array) { System.out.print(num + " "); } } }
希尔排序的时间复杂度取决于增量序列的选择,最坏情况下为O(n^2),最好情况下可达到O(n log n)。
希尔排序的空间复杂度为O(1),因为算法只需要常数级的额外空间来存储临时变量和增量值。
希尔排序相较于简单插入排序,在大规模数据集上表现更优,但并不如快速排序或归并排序等高级排序算法效率高。
Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者