Почему моя функция сортировки не может отсортировать мои данные? Где его разместить, чтобы успешно отсортировать мои данные? - PullRequest
0 голосов
/ 01 мая 2020

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я знаю, что нецелесообразно использовать два вектора, но это наше задание.

Вот мое приглашение:

В этой программе мы собираемся ввести имя и оценку 100 студентов из файла с именем student.txt. Этот файл был предоставлен вам. Вы должны использовать две векторные переменные, одну для хранения имен учеников, а другую для хранения оценок учеников. Кроме того, измените функцию selectionSort, чтобы отсортировать информацию об ученике на основе оценки в порядке возрастания. Наконец, отобразите отсортированную информацию об ученике на экране, используя cout. Например, предположим, что ниже приводится содержимое файла student.txt (в данном случае у нас есть только 4 пары значений).

Jeff 77

Charles 99

Ричард 67

Сина 79

Тогда результат программы будет

Чарльз 99

Сина 79

Джефф 77

Ричард 67

Вот мой код:

//Name
//This program will read and sort names and grades from a file using functions and vectors
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <vector>
using namespace std;

//Function prototype
void selectionSort(vector<int>& vector_values);

int main()
{
    ifstream infile;
    infile.open("student.txt");

    if (infile.fail() == false)
    {
        vector<string> all_names;
        vector<int> all_scores;
        string name;
        int score;

        while (infile >> name >> score) // read one name and one score
        {

            all_names.push_back(name); // add that name to vector
            all_scores.push_back(score); // add that score to vector



            int count = 0;
            const int max = 1;
            selectionSort(all_scores);
            while (count < max)
            {

                count++;
                cout << name << " " << score << endl;
            }
        }


    }
    else
    {
        cout << "Could not open the file." << endl;
    }
return 0;
}

void selectionSort(vector<int>& vector_values)
{
    for (unsigned pass = 0; pass < vector_values.size(); pass++)
    {
        int minimum = vector_values[pass];
        int minimum_index = pass;
        for (unsigned index = pass + 1; index < vector_values.size(); index++)
        {
            if (minimum > vector_values[index])
            {
                minimum = vector_values[index];
                minimum_index = index;
            }
        }

        int temp = vector_values[minimum_index];
        vector_values[minimum_index] = vector_values[pass];
        vector_values[pass] = temp;
    }
}

Вот моя проблема:

Код прекрасно компилируется и показывает имена и их Соответствующий счет, однако, кажется, что моя функция сортировки абсолютно ничего не делает. Имена отображаются в том же порядке, что и в файле изначально. Я разместил вызов в каждом месте, которое, как я думал, будет go, и ничего не изменилось. Теперь я обеспокоен тем, что размещение вызова - это не проблема, а вся функция.

1 Ответ

0 голосов
/ 01 мая 2020

Это утверждение

cout << name << " " << score << endl;

просто печатает два значения, которые вы только что прочитали. Не имеет значения, сортировали ли вы что-нибудь между ними.

Но вы также не сортируете массив all_names. И сортировка после добавления каждого элемента крайне неэффективна.

...