直接插入排序
2014-09-17 10:08
148 查看
/*直接插入排序是指从序列的第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 }//Input void 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 }//Insert void InsertSort::Output() { vector<int>::iterator it=vec.begin()+1; while(it!=vec.end()) { cout<<*it<<" "; it++; }//while }//Output void main() { InsertSort IS; IS.Input(); IS.Insert(); IS.Output(); }//main