返回轨道
算法 · 2026-05-14 · 31 阅读

S5 希尔排序

算法 31 阅读

信号摘要

难度:Easy · 时长:06:15

S5 希尔排序

未对外公开播放权限
点击查看说明

描述

希尔排序是由希尔提出的一种排序算法,它是插入排序的改进版本。希尔排序通过引入步长 gap,将数组分成多个子序列分别进行插入排序,这样可以让一个元素朝最终位置跳跃一大步。步长在每一轮排序后递减,最后减至 1,变成简单插入排序。这个时候,数组已经基本有序,只需要再做少量的对比和移动即可完成最后的排序。

代码

public class AlgoCasts {

  // Time: O(n^2), Space: O(1)
  public void sort(int[] arr) {
    if (arr == null || arr.length == 0) return;
    for (int gap = arr.length>>1; gap > 0; gap >>= 1) {
      for (int i = gap; i < arr.length; ++i) {
        int cur = arr[i];
        int j = i - gap;
        while (j >= 0 && arr[j] > cur) {
          arr[j+gap] = arr[j];
          j -= gap;
        }
        arr[j+gap] = cur;
      }
    }
  }

  // Time: O(n^2), Space: O(1)
  public void insertionSort(int[] arr) {
    if (arr == null || arr.length == 0) return;
    for (int i = 1; i < arr.length; ++i) {
      int cur = arr[i];
      int j = i - 1;
      while (j >= 0 && arr[j] > cur) {
        arr[j + 1] = arr[j];
        j -= 1;
      }
      arr[j + 1] = cur;
    }
  }

}

📡 通讯频道