直接插入排序

来源:互联网 发布:淘宝销量多久清零 编辑:程序博客网 时间:2024/06/03 20:04
/*直接插入排序是指从序列的第2个元素依次与前一元素比较,从i=2趟开始比较*//*则当i=k时,表示前k个元素已经排好了序,再进行第k+1个元素与第k个元素比较*//*若<k,则将k+1的元素设置为监哨,从第k个元素依次往前与监哨比较,有大于监哨的*//*则记录后移,最后将空出的记录位置上填上监哨*//*时间复杂度O(n*n)*/#include<iostream>#include<vector>using namespace std;class InsertSort{public:void Input();//数据输入void Insert();//直接插入排序void Output();//数据输出private:vector<int> vec;//vec[0]作为监视哨};void InsertSort::Input(){int a;cout<<"第一个输入的数据元素作为监哨值,不作为表中的排序元素:"<<endl;while(cin>>a){vec.push_back(a);}//while}//Inputvoid InsertSort::Insert(){int i,j;for(i=2;i<vec.size();i++)//从vec[1]——vec[size-1]逐次向前比较if(vec[i]<vec[i-1])//当前要排序的关键字小于前面已排序的最后一个即最大的关键字{vec[0]=vec[i];//将当前关键字设置为监哨for(j=i-1;(vec[j]>vec[0]);j--)//从i-1个关键字起,逐一向前与监哨对比vec[j+1]=vec[j];//若>,则依次后移记录vec[j+1]=vec[0];//此时j处的关键字不大于监哨,而j+1处空白,则将监哨值存于j+1处}//if}//Insertvoid InsertSort::Output(){vector<int>::iterator it=vec.begin()+1;while(it!=vec.end()){cout<<*it<<" ";it++;}//while}//Outputvoid main(){InsertSort IS;IS.Input();IS.Insert();IS.Output();}//main

0 0