详情见代码注释。
#include <iostream>
using namespace std;
//插入排序
void insert_sort(int arr[], int length) {
for (int i = 2; i < length; i++) {
//第一个元素不需要进行任何判断和操作,循环从 2 开始
if (arr[j] >= arr[j - 1]) continue; //当前元素已经有序,不用进行插入排序
arr[0] = arr[i];//哨兵设置为当前进行插入的元素
int j = i;//从有序序列的后一个元素向前遍历找插入位置
while (arr[j - 1] > arr[0]) {
arr[j] = arr[j - 1];
j--;
}
arr[j] = arr[0];//将元素插入到找到的位置
}
}
//起泡排序
void bubbling_sort(int arr[], int length) {
int exchange = length;//标识是否进行交换,若交换则记录下交换位置
while (exchange != 0) {
int END = exchange;//本轮排序的终点(上一轮排序中最后一次进行交换的位置)
exchange = 0;//标记,表示没有进行交换
for (int i = 2; i < END; i++) {
if (arr[i] < arr[i - 1]) {
//相邻元素进行比较,若反序则进行交换,并记录下参与交换的后一个元素位置
exchange = i;
swap(arr[i], arr[i - 1]);
}
}
}
}
int main() {
int n;
cin >> n;
//声明一个长度为 n + 1 的数组(数组第一个位置为哨岗)
const int LEN = n + 1;
int a[LEN];
for (int i = 1; i < LEN; i++) {
cin >> a[i];
}
insert_sort(a, LEN);
for (int i = 1; i < LEN; i++) {
cout << a[i] << ' ';
}
return 0;
}
运行效果: