//归并排序的关键:
// 1.将数组从中间分开,对两边进行分别排序
// 2. 将两个有序数组合并归并
#include<iostream>
using namespace std;
int a[10]={13,27,19,2,8,12,2,8,30,89};
int b[10];
void Merge(int a[],int s,int m,int e,int temp[]){ //将两个有序的数组合并归并
int pb=0;
int p1=s,p2=m+1;
while(p1<=m&&p2<=e){
if(a[p1]<a[p2]) //将小的 数放入新数组temp[]中
temp[pb++]=a[p1++];
else
temp[pb++]=a[p2++];
}
while(p1<=m) //如果仅满足一个条件p2<=e,则将p1之后的放入数组temp;
temp[pb++]=a[p1++];
while(p2<=e)
temp[pb++]=a[p2++];
for(int i=0;i<e-s+1;i++)
a[s+i]=temp[i];
}
void MergeSort(int a[],int s,int e,int temp[]){ //进行排序,调用归并函数
if(s<e){
int m=s+(e-s)/2; //将数组从中间分开,对两边分别排序
MergeSort(a,s,m,temp);
MergeSort(a,m+1,e,temp);
Merge(a,s,m,e,temp); //将排序好的两数组进行合并排序
}
}
int main(){
int size=sizeof(a)/sizeof(int);
MergeSort(a,0,size-1,b);
for(int i=0;i<size;++i)
printf("%d,\n",a[i]);
return 0;
}
归并排序的基本操作
最新推荐文章于 2022-03-20 15:31:01 发布