算法——直接插入排序
原理:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。
#include <iostream>
#include <vector>
using namespace std;
void InsertSort(vector<int>& k){
int n = k.size();
for(int i = 1; i < n; ++i){
if(k[i] < k[i-1]){
int j = i;
while(j > 0 && k[j] < k[j-1]){
swap(k[j],k[j-1]);
j--;
}
}
}
}
int main(){
vector<int> k = {9,5,7,3,2,6,1};
InsertSort(k);
for(auto x : k){
cout << x << " ";
}
cout << endl;
return 0;
}
最好的时间复杂度为O(N);
最坏的情况是反序的,此时最坏的时间复杂度为O(N^2);
平均情况,每轮N/2次循环,N轮时间复杂度为O(N^2);
是稳定的排序。