插入排序与希尔排序

来源:互联网 发布:lol鼠标宏编程走a设置 编辑:程序博客网 时间:2024/06/11 10:55
#include <iostream>#include <vector>#include <functional>using namespace std;template <typename Iterator ,typename Comparator >void insertionSort(const Iterator & begin,const Iterator & end,Comparator lessThan){    if(begin==end)        return;    for(auto p=begin+1;p!=end;++p)    {        auto tmp=std::move(*p);        auto j=p;        for(;j!=begin&&lessThan(tmp,*(j-1));j--)        {            *j=std::move(*(j-1));        }        *j=std::move(tmp);    }}template <typename Iterator>void insertionSort(const Iterator & begin,const Iterator & end){    insertionSort(begin,end,less<decltype(*begin)>{});}/*template <typename Comparable>void insertionSort(vector<Comparable> &vec){    for(int p=1;p<vec.size();p++)    {        Comparable tmp=std::move(vec[p]);        int j=p;        for(;j>0&&tmp<vec[j-1];j--)            vec[j]=std::move(vec[j-1]);        vec[j]=std::move(tmp);    }}*/int main(int argc, const char * argv[]) {    // insert code here...    vector<int> a{1,6,3,5};    vector<int> b{1,6,3,5};    insertionSort(a.begin(), a.end(),greater<int>{});    insertionSort(b.begin(), b.end());    for(auto x:a)        cout<<x<<endl;    for(auto x:b)        cout<<x<<endl;    std::cout << "Hello, World!\n";    return 0;}template <typename Comparable>void shellSort(vector<Comparable> & a){    for(int gap=a.size()/2;gap>0;gap/=2)    //缩减增量排序    {        for(int i=gap;i<a.size();i++)       //对增量位置后的每一个位置进行插入排序        {            Comparable tmp=std::move(a[i]);            int j=i;            for(;j>=gap&&tmp<a[j-gap];j-=gap)                a[j]=std::move(a[j-gap]);            a[j]=std::move(tmp);        }    }}
原创粉丝点击