排序算法 - 插入(Insertion Sort)

插入排序

插入排序 (Insertion Sort) 是通过将未排序元素插入已排序序列合适位置的排序算法。因排序过程是通过插入的方式实现,所以被称为 插入排序

1、算法描述

\(n\) 个记录 \((0\cdots n)\) 升序排列:

  1. 从未被排序的第 1 个元素 \(i\) 开始,数组第 1 个元素认为已被排序;
  2. 从已排序元素末尾开始向前扫描,依次与 \(i\) 对比;
  3. 若该元素大于 \(i\),将该元素后移 1 位;
  4. 重复步骤 3.,直到已排序元素中大于 \(i\) 的元素都已后移;
  5. 将元素 \(i\) 插入空出来的位置;
  6. 重复上述步骤。

2、Gif 演示

bubble.gif

3、代码实现

- Golang
package sort

func InsertionInt(arr []int, desc bool) []int {
    // 开始插入排序:
    for i := 1; i < len(arr); i++ {
        key := arr[i]
        j := i - 1
        // 将比 key 大/小的元素往后移一位
        for j >= 0 && (!desc && arr[j] > key || desc && arr[j] < key) {
            arr[j+1] = arr[j]
            j--
        }
        // 将 key 插入腾出来的空位
        arr[j+1] = key
    }
    return arr
}

参考文献

十大经典排序算法(动图演示) - 一像素 - 博客园 (cnblogs.com)

posted @ 2022-01-21 09:45  Icaurs  阅读(77)  评论(0)    收藏  举报