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 }