• 希尔排序


    思想:

    逐步分组进行粗调,最后进行插入排序。

    分组的话一开始两个元素之间相隔的距离是总元素数量的一半,然后再变为1半,最后变为1,每一次都是使用插入排序来做的,我排两个元素和一个元素,总比排很多个元素要好。

    代码:

     public static void sort(int[] nums) {
             int d = nums.length;
             while (d > 1) {
                 d = d / 2;
                 for (int i = 0; i < d; i++) { // 前面的四个数
                     for (int j = i + d; j < nums.length; j += d) { // 前面四个数一一对应的四个数
                         // 下面开始前后比较
                         int temp = nums[j];
                         int k ;
                         for (k = j - d; k >= 0 && nums[k] > temp; k -= d) {
                             nums[k + d] = nums[k]; // 前面的值赋给后面
                        }
                         // 最后k比插入位置少d
                         nums[k + d] = temp;
                    }
                }
            }
        }

    稳定性:不稳定

    空间复杂度:O(1)

    时间复杂度:平均是小于O (N^2) 的,看你的d是怎样选的,d选的好的话,可以降到O (n^3/2),或者O (n^4/3)

  • 相关阅读:
    25-k个一组翻转链表 203-移除链表元素 206-反转一个链表
    24. 两两交换链表中的节点
    23-合并K个升序链表
    19-删除链表的倒数第N个节点
    18-四数之和
    21-合并两个有序链表
    双指针
    16-最接近的三数之和
    15-三数之和
    RobotFramework 断言关键字
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/16121114.html
Copyright © 2020-2023  润新知