使用 int 对字符串数组进行排序

sorting string array with int

本文关键字:排序 数组 字符串 int 使用      更新时间:2023-10-16
#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;
      }
    }
  }
}

还有一件事是你的函数没有返回这个更改的数组。 因此,要么返回此更改的数组,要么使此时间和名称数组全局可访问。