【算法分析】
严蔚敏《数据结构(C语言版 第2版)》指出直接插入排序的算法步骤如下:
① 设待排序的记录存放在数组r[1..n]中,r[1]是一个有序序列。
② 循环n-1次,每次使用顺序查找法,查找r[i] (i=2, …, n) 在已排好序的序列r[1..i-1]中的插入位置,然后将r[i]插入表长为i-1的有序序列r[1..i-1],直到将r[n]插入表长为n-1的有序序列r[1..n-1],最后得到一个表长为n的有序序列。
【算法代码】
#include<bits/stdc++.h>
using namespace std;
int insertSort(vector<int> &a) {
int i,j,t;
for(i=1; i<a.size(); i++) {
if(a[i]<a[i-1]) {
t=a[i];
for(j=i-1; j>=0 && a[j]>t; j--) {
a[j+1]=a[j];
}
a[j+1]=t;
}
}
}
int main() {
vector<int> v;
int n;
cin>>n;
for(int i=1; i<=n; i++) {
int x;
cin>>x;
v.push_back(x);
}
insertSort(v);
for(int i=0; i<v.size(); i++) {
cout<<v[i]<<" ";
}
return 0;
}
/*
in:
8
49 38 65 97 76 13 27 49
out:
13 27 38 49 49 65 76 97
*/