#include<iostream>
#define N 10
using namespace std;
void merge(int a[],int b[],int l,int mid,int r){
int left=l,right=mid+1;
int k=0;//数组b下标
while(left<=mid&&right<=r){//左右还有元素
if(a[left]<=a[right]) //左右谁小先写谁
b[k++]=a[left++];
else
b[k++]=a[right++];
}
while(left<=mid)//左边剩下的
b[k++]=a[left++];
while(right<=r)//右边剩下的
b[k++]=a[right++];
for(int i=0;i<k;i++){//写进数组a中
a[l+i]=b[i];
}
}
void MergeSort(int a[],int b[],int l,int r){
if(l<r){//至少有2个元素
int mid=(l+r)/2;//取中点
MergeSort(a,b,l,mid);//左
MergeSort(a,b,mid+1,r);//右
merge(a,b,l,mid,r); //合并
}
}
printf(int a[],int l,int r){
for(int i=l;i<=r;i++){
cout<<a[i]<<"\t";
}
}
int main(){
int a[N]={0,9,9,7,6,5,3,2,1,1};
int b[N];
MergeSort(a,b,0,N-1);
printf(a,0,N-1);
return 0;
}
归并排序(合并排序)
于 2022-05-12 19:22:47 首次发布