您的位置:首页 > 其它

直接插入排序

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: