使用 int 对字符串数组进行排序
sorting string array with int
#include <iostream>
using namespace std;
void selectionSort (float arr[], int n) {
int i, j;
for (i = 0; i < n; ++i) {
for (j = i+1; j < n; ++j) {
if (arr[i] > arr[j]) {
arr[i] = arr[i] + arr[j];
arr[j] = arr[i] - arr[j];
arr[i] = arr[i] - arr[j];
}
}
}
}
int main() {
int n = 3;
string name[n];
float arr[n];
for (int i = 0; i < n; i++) {
cout << "Name of runner " << i+1 << ": ";
cin >> name[i];
cout << "Runner " << i+1 << "'s finishing time: ";
cin >> arr[i];
cout << endl;
}
selectionSort(arr, n);
cout << "1st place: " << name[0] << "t" << arr[0] << endl;
cout << "2nd place: " << name[1] << "t" << arr[1] << endl;
cout << "3rd place: " << name[2] << "t" << arr[2] << endl;
}
因此,当我输入名称和完成时间时,只有完成时间按从最快到最慢的顺序排序。我需要帮助使跑步者名称与完成时间匹配。
而不是两个占位符 name[3] 和 arr[3] 尝试使用对向量,如下所示:
std::vector<std::pair<int,string>> RunnerPairVector;
然后,您可以使用排序根据完成时间对配对进行排序,如下所示
std::sort(RunnerPairVector.begin(), RunnerPairVector.end());
排序名称也与其完成时间相对应。
#include <iostream>
using namespace std;
// Pass name array also to access it..
void selectionSort (string name[], float arr[], int n) {
int i, j;
for (i = 0; i < n; ++i) {
for (j = i+1; j < n; ++j) {
if (arr[i] > arr[j]) {
arr[i] = arr[i] + arr[j];
arr[j] = arr[i] - arr[j];
arr[i] = arr[i] - arr[j];
// Swap names also corresponding to their finishing times.
string temp = name[i];
name[i] = name[j];
name[j] = temp;
}
}
}
}
int main() {
int n = 3;
string name[n];
float arr[n];
for (int i = 0; i < n; i++) {
cout << "Name of runner " << i+1 << ": ";
cin >> name[i];
cout << "Runner " << i+1 << "'s finishing time: ";
cin >> arr[i];
cout << endl;
}
selectionSort(name, arr, n);
cout << "1st place: " << name[0] << "t" << arr[0] << endl;
cout << "2nd place: " << name[1] << "t" << arr[1] << endl;
cout << "3rd place: " << name[2] << "t" << arr[2] << endl;
}
您在这里做错的是您对时间数组进行排序,但没有对名称数组进行相应的更改。 因此,您也可以将名称数组与时间数组一起传递,并且在交换时间时,同时交换相应的名称。 像这样的东西。
void selectionSort(float arr[], string name[], int n) {
int i, j;
string temp;
for (i = 0; i < n; ++i) {
for (j = i + 1; j < n; ++j) {
if (arr[i] > arr[j]) {
arr[i] = arr[i] + arr[j];
arr[j] = arr[i] - arr[j];
arr[i] = arr[i] - arr[j];
//name swapping
temp = name[i];
name[i] = name[j];
name[j] = temp;
}
}
}
}
还有一件事是你的函数没有返回这个更改的数组。 因此,要么返回此更改的数组,要么使此时间和名称数组全局可访问。
相关文章:
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 合并排序不排序自创建数组类 c++
- 带有枚举方向/类型的气泡排序结构数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 排序并行数组
- 如何在数组 c++ 中对字符串进行排序
- 为什么在此排序算法实现中,向量明显比数组慢?
- 如何对不在数组中的变量进行排序?
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 按字母顺序对结构内数组变量中的名称进行排序
- 使用排序函数 c++ 对字符数组进行排序
- 使用 std::sort 对二维 c 数组进行排序
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 使用 std::sort 对 C 样式的 2D 数组进行部分排序
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 对 0 、1 和 2 的数组进行排序