将上面我给的代码修改成正确的归并排序
时间: 2024-02-13 19:04:00 浏览: 16
好的,以下是我修改后的归并排序代码:
```
void mergeSort(int* nums, int begin, int end) {
if (begin >= end) {
return;
}
int mid = begin + (end - begin) / 2;
mergeSort(nums, begin, mid);
mergeSort(nums, mid+1, end);
int len = end - begin + 1;
int* temp = new int[len];
int i = 0, j = begin, k = mid+1;
while (j <= mid && k <= end) {
if (nums[j] <= nums[k]) {
temp[i++] = nums[j++];
}
else {
temp[i++] = nums[k++];
}
}
while (j <= mid) {
temp[i++] = nums[j++];
}
while (k <= end) {
temp[i++] = nums[k++];
}
for (int p = 0; p < len; p++) {
nums[begin+p] = temp[p];
}
delete[] temp;
}
```
修改的主要内容:
1. 在归并排序函数中,不需要先求出序列的长度,因为可以通过 `end - begin + 1` 得到序列的长度。
2. 在 `while` 循环中,使用 `j <= mid` 和 `k <= end` 作为条件,因为当 `j` 或 `k` 超出界限时,循环就会停止。
3. 修改了 `temp` 数组的下标,使其从 `0` 开始,这样更符合C++的数组下标从 `0` 开始的规定。
4. 最后,释放 `temp` 数组占用的内存空间。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)