基础指南 之 归并排序

it2022-05-09  59

归并排序

两个有序数组的归并 数组 a 和数组 b 都是非降序的数组,数组长度分别为 m 和 n ,将两个数组合并成一个升序数组 c ,程序如下所示: void merge(int * a,int m,int * b,int n,int * c) { int i,j,k; i=j=k=0; while(i<m && j<n) { if(a[i]<b[j]) { c[k++]=a[i++]; } else { c[k++]=b[j++] } } while(i<m) { c[k++]=a[i++]; } while(j<n) { c[k++]=b[j++]; } } 将一个无序数组利用归并排序排列成一个升序数组,程序如下所示。首先递归调用 merge_sort 函数,直至将序列划分成两个单个元素组成的子序列,再调用 merge_array 将两个元素组成的子序列保持升序,再返回到上一层递归,调用 merge_array 将两组由两个元素构成的子序列排成四个元素的升序序列,依次递归,使得整个序列升序。 void merge_array(int * a,int first,int mid,int last,int * tem) { int i=first,m=mid,j=mid+1,n=last; int k=first; while(i<m && j<n) { if(a[i]<a[j]) { tem[k++]=a[i++]; } else { tem[k++]=a[j++]; } } while(i<m) { tem[k++]=a[i++]; } while(j<n) { tem[k++]=a[j++]; } for (int t = first; t <= last; t++) { a[t]=tem[t]; } } void merge_sort(int * a,int first,int last,int * tem) { if(first<last) { int mid=(last+first)/2; merge_sort(a,first,mid,tem); merge_sort(a,mid+1,last,tem); merge_array(a,first,mid,last,tem); } }

最新回复(0)