插入排序

模块1:线性扫描,试图将每个a[i]插入到前面的有序序列中。

模块2:[0, i]的无序区间进行扫描,找出插入的位置,该位置使得插入的瞬间:[0, k]区间有序,而[k+1, i]区间无序,所以插入点在k+1。

#include <iostream>
#include <vector>
using namespace std;
template <typename T>void insertionSort(vector<T>& a);
int main(){
    vector<int> a;
    a.push_back(2);
    a.push_back(3);
    a.push_back(1);
    insertionSort(a);
    for (auto x : a)
        cout << x << endl;
    return 0;
}
template <typename T> void insertionSort(vector<T>& a){
    for(int i = 1; i < a.size(); i++){
        T key = a[i];
        int j = i - 1;
        while( j >= 0 && key < a[j]){
            a[j+1] = a[j];
            j--;
        }
        a[j+1] = key;
    }
}

 

posted @ 2016-01-23 21:11  celahir  阅读(99)  评论(0编辑  收藏  举报