簡體   English   中英

用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;

然后,您可以使用sort來根據完成時間對配對進行排序,如下所示

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;
      }

    }

  }
}

還有一件事是您的函數不會返回此更改后的數組。 因此,要么返回此更改后的數組,要么使此時間和名稱數組可全局訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM