插入排序,就是吧第p位置的数据,插入到容量为p的有序容器中。
当然,一般来说,我们可以重新分配一块新的空间,用来存放有序的数据。但是下面的例子是在就的空间上进行排序,每次插入操作就是把第p位置的数据插入到0~p的位置上:
template<typename Obj,typename Iterator_>
void _insert_sort(Iterator_ first,Iterator_ last,Obj)
{
for(Iterator_ iter=first+1;iter!=last;++iter)
{
Obj obj=*iter;
Iterator_ _iter;
for(_iter=iter;_iter!=first;--_iter)
{
if(obj<=*(_iter-1))
*(_iter)=*(_iter-1);
else
break;
}
*_iter=obj;
}
}
完整的代码如下:
头文件:insert_sort.h
#ifndef ___INSERT_SORT_H_
#define ___INSERT_SORT_H_
template<typename Obj,typename Iterator_>
void _insert_sort(Iterator_ first,Iterator_ last,Obj)
{
for(Iterator_ iter=first+1;iter!=last;++iter)
{
Obj obj=*iter;
Iterator_ _iter;
for(_iter=iter;_iter!=first;--_iter)
{
if(obj<=*(_iter-1))
*(_iter)=*(_iter-1);
else
break;
}
*_iter=obj;
}
}
template<typename Iterator_>
void insert_sort(Iterator_& first,Iterator_& last)
{
_insert_sort(first,last,*first);
}
#endif
测试文件:test.cpp
#include<iostream>
#include"insert_sort.h"
#include<time.h>
using namespace std;
int main()
{
srand((int)time(NULL));
int iArray[100];
cout<<"the saw datas are:/n";
for(int i=0;i!=100;++i)
{
iArray[i]=rand()%100;
cout<<iArray[i]<<"/t";
}
cout<<endl;
int * first=iArray;
int * last=iArray+100;
insert_sort(first,last);
cout<<"after sort:/n";
for(int i=0;i!=100;++i)
{
cout<<iArray[i]<<"/t";
}
system("pause");
return 0;
}