void Merge(int a[],int start,int mid,int end)//排序
{
int* temp=new int[end-start+1];
int i=0;
int left=start;
int right=mid+1;
while(left<=mid && right<=end){
if(a[left]<a[right]){
temp[i]=a[left];
left++;
}else{
temp[i]=a[right];
right++;
}
i++;
}
while(left<=mid){
temp[i]=a[left];
left++;
i++;
}
while(right<=end){
temp[i]=a[right];
right++;
i++;
}
for(int j=0;j<end-start+1;j++){
a[start+j]=temp[j];
}
delete[] temp;
}
void MergeDivide(int a[],int start,int end)//分组
{
if(start<end){
int mid=(start+end)/2;
MergeDivide(a,start,mid);
MergeDivide(a,mid+1,end);
Merge(a,start,mid,end);
}
}
最简单易懂的归并排序算法
最新推荐文章于 2024-11-01 17:04:30 发布