1 //将有序列表L和R合并到A列表上
2 void Merge(int *L, int Lc, int *R,int Rc){
3 int i = 0,j = 0,k = 0;//分别表示L,R,A列表的索引
4 while(i < Lc && j < Rc)
5 T[k++] = L[i] < R[j] ? L[i++] : R[j++];//T变量为临时变量,保存所有的结果合并后数值
6 while(i < Lc)
7 T[k++] = L[i++];
8 while(j < Rc)
9 T[k++] = R[j++];
10 for(i = 0;i < k; i++)
11 L[i] = T[i];
12 }
13
14 void MergeSort(int *A,int n){
15 if(n < 2) return;//边界条件,一个元素的时候就不用再排序了
16 int mid = n / 2;
17 MergeSort(A, mid); //左边排序
18 MergeSort(A + mid,n - mid); //右边排序
19 Merge(A, mid, A + mid, n - mid);//合并结果
20 }
归并排序框架
最新推荐文章于 2024-11-12 18:03:10 发布