归并排序 运行出来的结果,最后一个数没有进行合并排序
(vs2017 C++)
代码如下
void merge_sort(vector<int> &nums, int l,int r,vector<int>&temp) {
if (l + 1 >= r) {
return;
}
int m = l + (r - l) / 2;
merge_sort(nums, l, m, temp);
merge_sort(nums, m, r, temp);
int p = l, q = m, i = l;
cout << "i=" << i << endl;
cout << "p=" << p << endl;
while (p < m || q < r) {
if (q >= r || (p < m &&nums[p] <= nums[q])) {
temp[i++] = nums[p++];
}
else {
temp[i++] = nums[q++];
}
}
for (i = l; i <r; ++i) {
nums[i] = temp[i];
}
}
int main() {
vector<int> nums{ 9,6,7,22,20,33,16,21 };
vector<int> temp(nums.size());
merge_sort(nums,0, nums.size() - 1,temp);
for (int i = 0; i < nums.size(); i++) {
cout << "nums[" << i << "]=" << nums[i] << endl;
}
return 0;
}
结果nums 为{6,7,9,16,20,22,33,21}
实际应为{6,7,9,16,20,22,21,33}