插入排序

插入排序

1. 解决的问题

在已经排好序的序列中,插入一个新元素,让序列依旧保持有序,如优先级队列

2. 核心知识

  • 0个或者1个元素,已经是排好序的
  • 交换位置的条件(升序):
    • 当前元素比后者大(sequeue[i] > sequeue[i+1])
    • 当前元素比前者小(sequeue[i] < sequeue[i-1])
  • 2层循环
    • 第1层:准备要插入的元素,从索引1开始
    • 第2层:将当前要插入的元素,前后交换位置直到让整个序列保持有序的位置

3. C++代码实现

C++ 复制代码
#include <iostream>
using namespace std;

// 定义数组的长度
const int array_len  = 7;

template<class T>
void insertSort(T(& nums)[array_len], int n) {
    // 索引为0的元素,只有1个,默认就是排好序的,从第二个元素开始,依次添加到有序列表中
    for (int i = 1; i < array_len; i++) {

        // i 表示当前要插入的值
        for (int j=i; j > 0; j--) {
            // 若当前值比后者小,则交换位置,若发现当前值比之前值大,则停止交换,已经到和合适的位置
            if (nums[j] < nums[j-1]) {
                T temp = nums[j];
                nums[j] = nums[j-1];
                nums[j-1] = temp;
            } else {
                break;
            }
        }
    }
}

int main() {
    // 定义数组的长度
    int nums[array_len] = {2, 3, 4, 5, 999, 33, 42};
    insertSort(nums, sizeof nums / sizeof nums[0]);

    // 输出排序后的数组
    for (int& num: nums) {
        cout << num << endl;
    }
}