【发布时间】:2020-10-11 13:08:03
【问题描述】:
以下是我的合并排序实现,它的作用是接受整数对数组并根据对中的第二个元素对它们进行排序(平局被对中的第一个元素打破,所有元素都是不同的)
void mer(vector<pair<int, int>> a, int l, int m, int r, vector<pair<int, int>> res) {
int i = l;
int j = m;
int k = l;
while (i < m && j < r) {
if (a[i].second < a[j].second) {
res[k] = a[i];
i++;
k++;
} else
if (a[i].second > a[j].second) {
res[k] = a[j];
j++;
k++;
} else {
if (a[i].first > a[j].first) {
res[k] = a[j];
k++;
j++;
} else {
res[k] = a[i];
i++;
k++;
}
}
}
while (i < m) {
res[k] = a[i];
k++;
i++;
}
while (j < r) {
res[k] = a[j];
k++;
j++;
}
for (int i = l; i < r; i++) {
a[i] = res[i];
}
}
void solve(vector<pair<int, int>> a, int l, int r, vector<pair<int, int>> res) {
if (l < r) {
int m = (l + r) / 2;
solve(a, l, m, res);
solve(a, m + 1, r, res);
mer(a, l, m, r, res);
}
}
但是当我使用main 运行我的代码时:
int main() {
int n;
cin >> n;
map<int, int> a;
for (int i = 0; i < n; i++) {
int u;
cin >> u;
a[u]++;
}
vector<pair<int, int>> b;
for (auto i : a) {
b.push_back(i);
}
vector<pair<int, int>> res(b.size());
solve(b, 0, b.size(), res);
}
考虑我的输入是:
10
1 1 1 1 1 1 2 2 3 3
it outputs
1 6
2 2
3 2
这就是输入是什么,输出是一样的。 我花了很多时间寻找问题。我无法修复它。
【问题讨论】:
-
首先,请统一格式化您的代码。能够阅读它,识别它的结构对于理解它很重要,这反过来又有助于发现和纠正错误。此外,将您的代码减少到minimal reproducible example。作为这里的新用户,也请带上tour并阅读How to Ask。