/*
归并排序
思路,分治思想,先把一个段分成两个,对两段分别进行归并排序,最后对两个以排好序的
段进行总的排序。
*/
#include<iostream>
using namespace std;
//将两个排好序的段进行总的排序,需要用到辅助数组帮助
void Merge(int a[],int b,int m,int e,int tmp[])
{
int pb = 0; //记录tmp数组下标
int p1 = b,p2 = m + 1;
while(p1 <= m && p2 <= e){
if(a[p1] < a[p2]) tmp[pb++] = a[p1++];
else tmp[pb++] = a[p2++];
}
while(p1 <= m){
tmp[pb++] = a[p1++];
}
while(p2 <= e){
tmp[pb++] = a[p2++];
}
for(int i = 0;i < e-b+1;++i){
a[b + i] = tmp[i];
}
}
void MergeSort(int a[],int s,int e,int tmp[])
{
if(s < e){
int m = s + (e - s)/2;
MergeSort(a,s,m,tmp);
MergeSort(a,m+1,e,tmp);
Merge(a,s,m,e,tmp);
}
}
int a[10] = { 13,27,19,2,8,12,2,8,30,89};
int b[10];
int main()
{
int size = sizeof(a) / sizeof(int); //注意,得到size需要 /sizeof(int)
MergeSort(a,0,size - 1,b);
for(int i=0;i < size;++i){
cout << a[i] << " ";
}
return 0;
}
归并排序
最新推荐文章于 2024-03-26 17:18:09 发布