插入排序核心就是在遍历整个数组中,在头部从头往后进行比较,如果比较大小成功,不变顺序,如果比较大小是你要的排序,再遍历前面已经排序过的数组,从尾部开始,再次比较大小,比较不符合,数组内容往后顺推,直到遍历比较发现符合排序顺序,或者到数组头部,就停止遍历,再接着上层遍历。
例子:这个网站所有排序都动态排序
https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
B站王道插入排序基本概念
下面c++代码
#include "iostream"
#define MAXSIZE 21
using namespace std;
struct SqList{
int data[MAXSIZE];
int length;
};
SqList initList(){
SqList sqList;
sqList.length = 0;
int N, tmp;
cin >> N;
for (int i = 0; i < N; ++i) {
cin >> tmp;
sqList.data[sqList.length++] = tmp;
}
return sqList;
}
void InsertSort(SqList *sqList){
int i,j,tmp;
for (i = 1; i < sqList->length; ++i) {
if (sqList->data[i] < sqList->data[i-1]){
tmp = sqList->data[i];
for (j = i-1; j >= 0 && sqList->data[j] > tmp; --j) {
sqList->data[j+1] = sqList->data[j];
}
sqList->data[j+1] = tmp;
}
}
}
void PrintSort(SqList sqList){
for (int i = 0; i < sqList.length; ++i) {
cout << sqList.data[i] << " ";
}
}
int main(){
SqList sqList = initList();
InsertSort(&sqList);
PrintSort(sqList);
return 0;
}