原理

  • 将待排列元素划分为已排序和未排序两部分,每次从未排序的元素中选择一个插入到已排序的元素中的正确位置
  • 类似于打扑克时的抓牌

    性质

  • 稳定性:稳定的

  • 时间复杂度:
    • 最优:插入排序 - 图1
    • 平均和最坏:插入排序 - 图2

      代码

      1. public void insertion_sort(int[] a) {
      2. for (int i = 1; i < a.length; i++) {
      3. int key = a[i];
      4. int j = i - 1;
      5. while (j >= 0 && a[j] > key) {
      6. a[j + 1] = a[j];
      7. j--;
      8. }
      9. a[j + 1] = key;
      10. }
      11. }