@@ -226,16 +226,8 @@ function merge($left, $right)
226226
227227## 9. C++ 代码实现
228228
229- ### 9.1 递归版
230-
231229``` cpp
232- void mergeSort (vector<int >& nums, int l, int r) {
233- if (r - l <= 1) {
234- return;
235- }
236- int mid = (l + r) / 2;
237- mergeSort(nums, l, mid);
238- mergeSort(nums, mid, r);
230+ void merge (vector<int >& nums, int l, int mid, int r) {
239231 int index = 0;
240232 int ptrL = l;
241233 int ptrR = mid;
@@ -251,40 +243,17 @@ void mergeSort(vector<int>& nums, int l, int r) {
251243 tempary[ index++] = nums[ ptrL++] ;
252244 }
253245 while (ptrR != r) {
254- tempary[ index++] = nums[ ptrR++] ;
246+ tempary[ index++] = nums[ ptrR++] ;
255247 }
256248 copy(tempary.begin(), tempary.begin() + index, nums.begin() + l);
257249}
258- ```
259-
260- ### 9.2 迭代版
261-
262- ```cpp
263- void mergeSort(vector<int>& nums) {
264- for (int step = 1; step <= nums.size(); step *= 2) {
265- for (int i = 0; i + step < nums.size(); i += 2 * step) {
266- int l = i;
267- int r = min((int)nums.size(), i + step * 2);
268- int mid = i + step;
269- int index = 0;
270- int ptrL = l;
271- int ptrR = mid;
272- static vector<int>tempary(50000);
273- while (ptrL != mid && ptrR != r) {
274- if (nums[ptrL] < nums[ptrR]) {
275- tempary[index++] = nums[ptrL++];
276- } else {
277- tempary[index++] = nums[ptrR++];
278- }
279- }
280- while (ptrL != mid) {
281- tempary[index++] = nums[ptrL++];
282- }
283- while (ptrR != r) {
284- tempary[index++] = nums[ptrR++];
285- }
286- copy(tempary.begin(), tempary.begin() + index, nums.begin() + l);
287- }
250+ void mergeSort(vector<int >& nums, int l, int r) {
251+ if (r - l <= 1) {
252+ return;
288253 }
254+ int mid = (l + r) / 2;
255+ mergeSort(nums, l, mid);
256+ mergeSort(nums, mid, r);
257+ merge(nums, l, mid, r);
289258}
290- ```
259+ ```
0 commit comments