归并排序

来源:互联网 发布:燕郊seo 编辑:程序博客网 时间:2024/05/29 15:47
/* *算法描述:1、把前一半排序            2、把后一半排序            3、把两半归并到一个新的有序数组,然后再拷贝到原数组,排序完成 */ #include <iostream> using namespace std; void Merge(int a[],int s,int m,int e,int tmp[]) {//将数据a的局部a[s,m]和a[m+1,e]合并到tmp,并保证tmp有序,然后再拷贝到a[s,e]     int pb = 0;     int p1 = s,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-s+1 ;i++)        a[s+i] = tmp[i]; } void MergeSort(int a[],int s,int e,int tmp[])//把数组a从下标s到e的部分进行归并排序,tmp是中转数组 {     if(s < e)     {         int m = s +(e-s)/2;//m作为s和e的中点         MergeSort(a,s,m,tmp);//把前一半排序         MergeSort(a,m+1,e,tmp);//把后一半排序         Merge(a,s,m,e,tmp);//把两半归并到一个新的有序数组,然后再拷贝到原数组,排序完成     } } int a[10] = {25,96,65,48,51,24,12,39,91,24}; int b[10]; int main() {     int size = sizeof(a)/sizeof(int);     MergeSort(a,0,size-1,b);//进行归并排序     for(int i= 0; i<size; ++i)     {         cout << a[i] << ",";     }     cout << endl;     return 0; }

0 0
原创粉丝点击