改进的归并排序算法

来源:互联网 发布:黄景瑜是淘宝什么模特 编辑:程序博客网 时间:2024/05/01 16:25
*#include <iostream>#include <math.h>using namespace std; #define N 120double arra[N]={0};double arrb[N]={0};void rand_data(){ for(int i=0;i<N;i++) arra[i]=rand()%1000;}void Merge(double *arra, double *arrb, int low, int mid, int high){int i=low,j=mid+1,k=low;while(i<=mid&&j<=high){if(arra[i]<arra[j]) arrb[k++]=arra[i++];else arrb[k++]=arra[j++];}while(i<=mid){arrb[k++]=arra[i++];}while(j<=high){arrb[k++]=arra[j++];}}void MergeSort(double *arra, double *arrb, int n){int step,i,j,k;int flag=0;for(step=1;step<=n;step*=2){flag=log((double)step)/log((double)2);//cout<<"flag is "<<flag<<endl;if(flag%2==0){for(i=0;i<n-2*step+1;i+=2*step)Merge(arra,arrb,i,i+step-1,i+2*step-1);//require i+2*step-1 < nif(i<n-step+1){Merge(arra,arrb,i,i+step-1,n-1);//require i+step-1 < n}else{for(k=i;k<n;k++)arrb[k]=arra[k];}}else{for(i=0;i<n-2*step+1;i+=2*step)Merge(arrb,arra,i,i+step-1,i+2*step-1);//require i+2*step-1 < nif(i<n-step+1){Merge(arrb,arra,i,i+step-1,n-1);//require i+step-1 < n}else{for(k=i;k<n;k++)arra[k]=arrb[k];}}}}int _tmain(int argc, _TCHAR* argv[]){ rand_data(); for(int i=0;i<N;i++)        cout<<arra[i]<<" ";cout<<endl; MergeSort(arra,arrb,N);    for(int i=0;i<N;i++)        cout<<arra[i]<<" ";cout<<endl; for(int i=0;i<N;i++)        cout<<arrb[i]<<" ";cout<<endl;    system("pause"); return 0;}