C++_归并排序

来源:互联网 发布:爱拍录屏软件 编辑:程序博客网 时间:2024/05/18 08:29

//合并有序数组

//合并例子

void MemeryArray(int a[], int n, int b[],int m, int c[]){int i,j,k;i=j=k=0;while(i<n && j<m){if(a[i]<b[j]){c[k++] = a[i++];}else{c[k++]=b[j++];}}while(i<n){c[k++]=a[i++];}while(j<n){c[k++] = b[j++];}}

//排序需要调用的如下

//排序调用

bool MergeSort(int a[], int n){int *p = new int[n];if(p==NULL){return false;}mergesort(a,0,n-1,p);  //用n-1是因为 合并的时候用的是 "<=" 而不是 "<"delete[] p;return true;}

//数组按照中值,左右执行递归

void mergesort(int a[],int first,int last,int temp[]){if(first<last){int mid = (first+last)/2;mergesort(a,first,mid,temp);mergesort(a,mid+1,last,temp);mergearray(a,first,mid,last,temp);}}

//最后对数组进行合并

void mergearray(int a[], int first, int mid, int last, int temp[])  {int i=first, j = mid+1;int m = mid, n =last;int k=0;while(i<=m&&j<=n){if(a[i]<=a[j]){temp[k++]=a[i++];}else{temp[k++] = a[j++];}}while(i<=m){temp[k++] = a[i++];}while(j<=n){temp[k++]=a[j++];}for(i=0;i<k;i++){a[first+i] = temp[i];}}


原创粉丝点击