直接插入排序的基本思路是,选定当前位置Index,那么认为Index以前的数据都是有序的。那么接下来的操作是先保存当前位置的数据,从Index-1开始往前找,如果当前遍历到的位置严格比Index位置的大,那么就执行把当前数据赋值给毗邻的下一个数据的操作,否则我们就找到的要插入的位置(当前位置的下一个位置为目标位置)
这里有一道oj题:
输入
数据个数n,n个数据
输出
直插排序的每一趟排序结果
样例输入
7 34 23 677 2 1 453 3
样例输出
23 34 677 2 1 453 3
23 34 677 2 1 453 3
2 23 34 677 1 453 3
1 2 23 34 677 453 3
1 2 23 34 453 677 3
1 2 3 23 34 453 677
代码实现如下:
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
int *array = new int[n];
for (int i = 0; i < n; ++i) {
cin>>array[i];
}
for (int i = 1; i < n; ++i) {
int temp = array[i];
int j;
for (j = i - 1; j >= 0; --j) {
if (array[j] > temp) {
array[j + 1] = array[j];
} else {
break;
}
}
array[j + 1] = temp;
for (int k = 0; k < n; ++k) {
if (k < n - 1) {
cout<<array[k]<<" ";
} else {
cout<<array[k]<<endl;
}
}
}
delete []array;
}