排序算法
插入排序
插入排序 就是维持一个循环不变式 前面的有序 再插一个还是有序
一般实现的话 优先选择迭代版本
递推版本因为函数调用的原因显然不够好
插入排序的思考:
1. 显然 在源序列基本有序的情况下 插入排序的表现较好 。逆序的情况下则表现为O(n^2)。(跟冒泡排序,选择排序)
2. 插入排序 属于稳定的
#include<iostream>
#include<vector>
using namespace std;
//迭代版本
void insertSort(vector<int>& src)
{
int src_size = src.size();
if (src_size <= 1)
return;
int value = 0;
for (int j = 1; j != src_size; ++j)
{
value = src[j];
int i = j-1;
while (i >= 0 && src[i] > value)
{
src[i + 1] = src[i];
--i;
}
src[i + 1] = value;
}
}
//递归版本
void insertSort(vector<int>& src, int q)
{
if (q > 0)
{
insertSort(src,q-1);
int value = src[q];
int i = q - 1;
while (i >= 0 && src[i] > value)
{
src[i + 1] = src[i];
--i;
}
src[i + 1] = value;
}
}
int main()
{
vector<int> test;
int xx;
while (cin >> xx)
test.push_back(xx);
insertSort(test,test.size()-1);
for (int i = 0; i != test.size(); ++i)
cout << test[i]<<' ';
cout << endl;
return 0;
}