一:代码模板 int p[N]; int temp[N]; //该数组的作用是用来暂存p[N]数组中的元素 void merge_sort(p[], int l, int r) { if(l >= r) return; //如果数组的长度为0或者1直接返回 int mid = l + r >> 1; //选取分界点 merge_sort(p, l, mid); //将分出来的子区间执行递归操作 merge_sort(p, mid + 1, r); int k = 0; int i = l, j = mid; //将两个有序数组合二为一 while(i <= mid && j <= r) { if(p[i] <= p[j]) temp[k++] = p[i++]; //从小到大依次 else temp[k++] = p[j++]; } while(i <= mid) temp[k++] = p[i++]; //将子区间中还没有遍历完的元素全部 遍历并且加到temp数组中 while(j <= r) temp[k++] = p[j++]; //将temp数组复制到p数组中去 for(int i = l, int j = 0; i <= r, i++, j++) { p[i] = temp[j]; } } 二:对归并排序的个人理解笔记