class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型vector 待排序的数组 * @return int整型vector */ // 使用递归形式的递归排序 void Merge(vector<int>& arr, int l, int q, int r) { int left = l, right = q + 1; int temp[r - l + 1]; // 辅助函数 int i = 0; // 三个while循环,进行两组数的逐个判断录入 while(left <= q && right <= r) { temp[i++] = arr[left] <= arr[right] ? arr[left++] : arr[right++]; } while(left <= q) { temp[i++] = arr[left++]; } while(right <= r) { temp[i++] = arr[right++]; } // 辅助数组填充完毕,直接循环赋给原数组 for(int j = 0; j < i; ++j) { arr[l + j] = temp[j]; } } void MergeSort(vector<int>& arr, int l, int r) { if (l == r) { return ; } // 对半划分 int q = (l + r) / 2; // 子问题1和2 MergeSort(arr, l, q); MergeSort(arr, q + 1, r); // 合 Merge(arr, l, q, r); } vector<int> MySort(vector<int>& arr) { int len = arr.size(); MergeSort(arr, 0, len - 1); return arr; } };