• Java排序算法之希尔排序


    希尔排序(Shell Sort)又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。它的基本思想是:首先将整个数组按照一定的间隔分成若干个子序列,然后对每个子序列分别进行插入排序,减小间隔,再进行排序,直至间隔减至1。该算法主要分为以下几个步骤:

    1. 先确定一个增量(间隙)序列,通常以数组长度的一半作为初始增量,不断缩小增量的值,直到为1为止。

    2. 以增量序列中的每个值作为间隔,将待排序元素分成若干个子序列,分别进行插入排序。

    3. 缩小增量,重复第二步操作,直到增量等于1。

    希尔排序的时间复杂度为O(nlogn),相对于直接插入排序算法的O(n^2)要快得多,尤其是对于大规模数据的排序。

    希尔排序是插入排序的一种改进和升级版本,其原理是将待排序的序列分成若干组,对每组进行插入排序,并逐步增加每组的元素数量,最终完成对整个序列的排序。下面是Java实现希尔排序的代码示例:

    1. public class ShellSort {
    2. public static void shellSort(int[] arr) {
    3. int len = arr.length;
    4. int gap = len / 2;
    5. while (gap > 0) {
    6. for (int i = gap; i < len; i++) {
    7. int cur = arr[i];
    8. int preIndex = i - gap;
    9. while (preIndex >= 0 && arr[preIndex] > cur) {
    10. arr[preIndex + gap] = arr[preIndex];
    11. preIndex -= gap;
    12. }
    13. arr[preIndex + gap] = cur;
    14. }
    15. gap /= 2;
    16. }
    17. }
    18. public static void main(String[] args) {
    19. int[] arr = { 4, 6, 8, 1, 3, 5, 9, 2, 7 };
    20. shellSort(arr);
    21. System.out.println(Arrays.toString(arr));
    22. }
    23. }

    在这个示例中,我们首先定义了shellSort方法,它接受一个整数数组作为输入。我们首先获取该数组的长度,并将其折半作为间隔长度。然后,我们使用while循环,通过逐渐减小间隔数来逐步增加每组的元素数量。在for循环中,我们使用插入排序方法对每组进行排序。最后,我们将间隔长度除以2,然后继续进行排序,直到间隔长度为1。

    在main方法中,我们使用示例数组调用shellSort方法,然后使用Arrays.toString方法打印排序后的数组。

  • 相关阅读:
    性能测试/负载测试/压力测试之间的区别
    区块链 - 为何元宇宙上了时代周刊?
    机器学习泛化误差
    Linux内存管理(三十二):直接内存规整详解
    Vue学习篇一
    Servlet和Jsp简介
    结构型模式总结
    【无标题】
    信号发送与处理
    深入理解箭头函数和传统函数的区别
  • 原文地址:https://blog.csdn.net/m0_37649480/article/details/134413433