插入排序

1. 基本原理

每步将一个待排序的元素,将其插入前面已排好序的部分中,直到全部插入完为止。

2. 算法步骤

  1. 将待排序序列第一个元素看做已排序序列,把第二个元素到最后一个元素当成是未排序序列
  2. 从未排序序列中取出下一个元素记为 a,在已排序的序列中从后向前扫描
  3. 如果该元素(已排序)大于 a,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于 a 的位置
  5. 将 a 插入到该位置后
  6. 重复步骤2~5,直至没有未排序元素

3. 动画演示

插入排序 Insert Sort

4. 参考实现

import java.util.Arrays;

/**
 * @author wylu
 */
public class InsertSort {
    public static void sort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int j = i, tmp = arr[i];
            for (; j >= 1 && arr[j - 1] > tmp; j--) {
                arr[j] = arr[j - 1];
            }
            arr[j] = tmp;
        }
    }

    public static void main(String[] args) {
        int[] arr = {3, 1, 4, 9, 6, 0, 7, 2, 5, 8};
        InsertSort.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

5. 复杂度分析

排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 排序方式 稳定性
插入排序 O(n2)O(n^2) O(n)O(n) O(n2)O(n^2) O(1)O(1) In-place 稳定

6. References

图片来源
https://youliao.163yun.com/api-server/rss/xiaomi/item/IN2WDOMKAWVNTZV.html?ref=browser_news&s=mb&cp=cn-netease-youliao-browser&docid=44797c69e120935b2c4790d933d02a9b&itemtype=news&cateCode=rec&category=%E7%A7%91%E6%8A%80

相关文章: