您的位置:首页 > 其它

第2章:算法基础

2016-05-30 20:21 323 查看

1:插入排序:

代码如下:

template<class Type>
void insertionSort(vector<Type>& a)
{
for(typename vector<Type>::size_type i=1;i!=a.size();i++)
{
Type tmp=a[i];
typename vector<Type>::size_type j;
for(j=i;j>=1&&tmp<a[j-1];j--)
a[j]=a[j-1];
a[j]=tmp;
}
}


2:归并排序:

归并排序用到了分治算法,代码如下:

template<class Type>
void merge(vector<Type>& a,vector<Type>& tempArray, int leftPos,int rightPos,int rightEnd)
{
int leftEnd=rightPos-1;
int tempPos=leftPos;
int numElements=rightEnd-leftPos+1;

while( leftPos<=leftEnd && rightPos<=rightEnd)
if(a[leftPos]<=a[rightPos])
tempArray[tempPos++]=a[leftPos++];
else
tempArray[tempPos++]=a[rightPos++];

while(leftPos<=leftEnd)
tempArray[tempPos++]=a[leftPos++];

while(rightPos<=rightEnd)
tempArray[tempPos++]=a[rightPos++];

for(int i=0;i!=numElements;i++,rightEnd--)
a[rightEnd]=tempArray[rightEnd];
}

template<class Type>
void mergeSort(vector<Type>& a,vector<Type>& tempArray,int left,int right)
{
if(left<right){
int center=(left+right)/2;
mergeSort(a,tempArray,left,center);
mergeSort(a,tempArray,center+1,right);
merge(a,tempArray,left,center+1,right);
}
}

template<class Type>
void mergeSort( vector<Type>& a)
{
vector<Type> tempArray(a.size());
mergeSort(a,tempArray,0,a.size()-1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: