当前位置:编程学习 > C/C++ >>

插入排序的C++代码

答案:【直接插入排序算法】

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++程序

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,