答案:【直接插入排序算法】void InsertSort(DataType A[], int n)
{//采用直接插入排序的方法对数组A中的n的元素排序
DataType x;//用于交换时的暂存
int i,j,k;for(i=1;i<n;i++)
{
//找到插入的位置k:
k=i;
for(j=i-1;j>=0;j--)
{
if(A[i]>A[j])
{
k=j+1;
break;
}
cout<<j<<endl;
}
//
if(k==i)
{
//说明插入的位置是最后一个,不用移动位置
}
else
{
x=A[i];
//将结点后移:
for(j=i;j>k;j--)
{
A[j]=A[j-1];
}
A[k]=x;
}
}return;
}
【算法的使用例子】
#include "iostream"
using namespace std;
#define DataLeng 5
typedef int DataType;
//显示数据:
void printData(DataType A[], int n)
{for(int i=0;i<n;i++)
{
cout<<A[i]<<" ";
}
cout<<endl;
return;
}
void main()
{int data[5]={3,8,5,4,6};
//排序前:
cout<<"<1>没有排序前的顺序是:"<<endl;
printData(data,DataLeng);//排序:
InsertSort(data,DataLeng);//排序后:
cout<<"<2>排序后的顺序是:"<<endl;
printData(data,DataLeng);return;
#include <iterator>
}
template<typename biIter>
void insertion_sort(biIter begin, biIter end)
{
typedef typename std::iterator_traits<biIter>::value_type value_type;
biIter bond = begin;
std::advance(bond, 1);
for(; bond!=end; std::advance(bond, 1)) {
value_type key = *bond;
biIter ins = bond;
biIter pre = ins;
std::advance(pre, -1);
while(ins!=begin && *pre>key) {
*ins = *pre;
std::advance(ins, -1);
std::advance(pre, -1);
}
*ins = key;
}
}
上一个:C++通讯录管理系统
下一个:求一个C++程序