合并排序相同的输出 C++
Merge sort same output C++
我为归并排序写了下面的代码,但它不起作用,而且我无法找出问题所在!
每次输出与输入相同时,我认为由于向量引用可能会出现问题。
我认为 mergeSort 没有为子数组创建新的向量。但我仍然很困惑。
输入向量:5, 4, 3, 2, 1
输出:5, 4, 3, 2, 1
请求输出:1, 2, 3, 4, 5
#include <iostream>
#include <vector>
using namespace std;
void merge(vector<int> &la, vector<int> &ra, vector<int> &A) {
int i = 0, j = 0, k = 0;
// overwriting A using its solved sub arrays i.e la, ra
while (i < la.size() && j < ra.size()) {
if (la[i] <= ra[j]) {
A[k] = la[i];
i++;
k++;
} else {
A[k] = ra[j];
j++;
k++;
}
}
// if any subarray left then
while (i < la.size()) {
A[k] = la[i];
k++;
i++;
}
while (j < ra.size()) {
A[k] = ra[j];
k++;
j++;
}
}
合并排序函数:
void mergeSort(vector<int> &A) {
if (A.size() < 2)
return;
int len = A.size();
vector<int> la, ra;
for (int i = 0; i < len / 2; i++)
la.push_back(A[i]);
for (int i = len / 2; i < len; i++)
ra.push_back(A[i]);
// dividing the proble into subproblem
mergeSort(la);
mergeSort(ra);
// merging the solved subproblem
merge(la, ra, A);
}
驱动函数:
int main(void) {
int arr[] = { 5, 4, 3, 2, 1 };
vector<int> A(arr, arr + 5);
for (int i = 0; i < A.size(); i++)
cout << A[i] << " ";
cout << endl;
mergeSort(A);
for (int i = 0; i < A.size(); i++)
cout << A[i] << " ";
return 0;
}
贴出的代码好像没有问题
执行它会产生预期的输出:1 2 3 4 5
,所以还有其他事情可能会引起您的观察:您可能 运行 由以前的版本或至少不同的版本生成的可执行文件代码。
我为归并排序写了下面的代码,但它不起作用,而且我无法找出问题所在! 每次输出与输入相同时,我认为由于向量引用可能会出现问题。 我认为 mergeSort 没有为子数组创建新的向量。但我仍然很困惑。
输入向量:5, 4, 3, 2, 1
输出:5, 4, 3, 2, 1
请求输出:1, 2, 3, 4, 5
#include <iostream>
#include <vector>
using namespace std;
void merge(vector<int> &la, vector<int> &ra, vector<int> &A) {
int i = 0, j = 0, k = 0;
// overwriting A using its solved sub arrays i.e la, ra
while (i < la.size() && j < ra.size()) {
if (la[i] <= ra[j]) {
A[k] = la[i];
i++;
k++;
} else {
A[k] = ra[j];
j++;
k++;
}
}
// if any subarray left then
while (i < la.size()) {
A[k] = la[i];
k++;
i++;
}
while (j < ra.size()) {
A[k] = ra[j];
k++;
j++;
}
}
合并排序函数:
void mergeSort(vector<int> &A) {
if (A.size() < 2)
return;
int len = A.size();
vector<int> la, ra;
for (int i = 0; i < len / 2; i++)
la.push_back(A[i]);
for (int i = len / 2; i < len; i++)
ra.push_back(A[i]);
// dividing the proble into subproblem
mergeSort(la);
mergeSort(ra);
// merging the solved subproblem
merge(la, ra, A);
}
驱动函数:
int main(void) {
int arr[] = { 5, 4, 3, 2, 1 };
vector<int> A(arr, arr + 5);
for (int i = 0; i < A.size(); i++)
cout << A[i] << " ";
cout << endl;
mergeSort(A);
for (int i = 0; i < A.size(); i++)
cout << A[i] << " ";
return 0;
}
贴出的代码好像没有问题
执行它会产生预期的输出:1 2 3 4 5
,所以还有其他事情可能会引起您的观察:您可能 运行 由以前的版本或至少不同的版本生成的可执行文件代码。