Использование сортировки выбора с массивом строк в C ++ - PullRequest
0 голосов
/ 26 апреля 2018

У меня проблемы с выдачей правильного результата в этом виде выбора.Я чувствую, что код правильный и логика работает, но, насколько я понимаю, результат, который я получаю, неверен.Вот мой код:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
using namespace std;

// Function prototypes
void selectionSort(string[], int);
string linearSearch(string[]);

// Declare variables
    const int MAX_FRIENDS = 250;
    int currentIteration = 0;

Main:

int main()
{
    // Declare stream file
    fstream names;
    names.open("myFriends.txt");
    string friends[MAX_FRIENDS];
    while(getline(names,friends[currentIteration])){
        currentIteration++;
    }
    cout << "Before Sort:\n\n";
    for(int i = 0; i < currentIteration; i++){
        cout << "Index " << i << ": " << friends[i] << endl;
    }
    selectionSort(friends,5);
    cout << "\nAfter Sort: \n\n";
    for(int i = 0; i < currentIteration; i++){
        cout << "Index " << i << ": " << friends[i] << endl;
    }
    system("pause");
    return 0;
}

Объявление функции

void selectionSort(string arr[], int num){
    // Declare Necessary Variables
    int startScan,minIndex, index;
    string minValue;
    for(startScan = 0; startScan < (num - 1); startScan++){
        index = startScan;
        minIndex = startScan;
        minValue = arr[startScan];
        for(index = (startScan + 1); index < num; index++){
            if(arr[index] < minValue){
                minValue = arr[index];
                minIndex = index;
            }
            index++;
        }
        arr[minIndex] = arr[startScan];
        arr[startScan] = minValue;
    }
}

Я работаю с текстовым файлом myFriends, который содержит следующие именав следующем порядке

  1. Сэмюэл Саид
  2. Луиза Стивен
  3. Стивен Уэйкфилд
  4. Пэтти Андерсон
  5. Джон Гувер

Когда я запускаю сортировку выбора, я получаю эту последовательность обратно в следующем порядке.

  1. Луиза Стивен
  2. Джон Гувер
  3. Патти Андерсон
  4. Сэмюэль Саид
  5. Стивен Уэйкфилд

Насколько мне известно ASCII, это неправильные значения.Пожалуйста, сообщите.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Вы увеличиваете index в два раза.

    for(index = (startScan + 1); index < num; index++){ // increment it here
        if(arr[index] < minValue){
            minValue = arr[index];
            minIndex = index;
        }
        index++; // and increment it also here
    }

Таким образом, вы проверяете только все остальные элементы массива.

Избавьтесь от второй строки index++;.

0 голосов
/ 26 апреля 2018

Существует как минимум одна логическая ошибка.index увеличивается дважды за итерацию вашего внутреннего цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...