#include <iostream>
using namespace std;
//合并
void merge(int *A,int p,int q,int r)
{
int n1=q-p+1;
int n2=r-q;
int *left=new int[n1+1];
int *right=new int[n2+1];
int i;
int m=0,n=0;
for(i=p;i<=r;i++)
{
if(i<=q)
left[m++]=A[i];
else
right[n++]=A[i];
}
left[m]=0x7fffffff;//哨兵
right[n]=0x7fffffff;
m=0;n=0;
for(i=p;i<=r;i++) {
if(left[m]<right[n]){
A[i]=left[m];
m++;
}
else{
A[i]=right[n];
n++;
}
}
delete[] left;
delete[] right;
}
//分解
void mergesort(int *A,int p,int r)
{
if(p<r){
int q=(p+r)/2;
mergesort(A,p,q);
mergesort(A,q+1,r);
merge(A,p,q,r);
}
}
int main()
{
int A[10]={9,8,7,6,5,4,3,2,1,0};
int i;
for(i=0;i<10;i++)
cout<<A[i]<<" ";
cout<<endl;
mergesort(A,0,9);
for(i=0;i<10;i++)
cout<<A[i]<<" ";
cout<<endl;
return 0;
}
排序算法之分治法
最新推荐文章于 2022-07-31 23:04:28 发布