插入排序
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;
}
}