在c ++中使用选择排序和字符串数组

时间:2018-04-25 22:47:24

标签: c++ algorithm sorting

我遇到了在此选择排序上产生正确结果的问题。我觉得好像代码是正确的并且逻辑有效,但是根据我目前的理解,我得到的结果是不正确的。这是我的代码:

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

主:

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. Samuel Said
  2. Louise Stephen
  3. Stephen Wakefield
  4. Patty Anderson
  5. John Hoover
  6. 当我运行选择排序时,我按此顺序返回此序列。

    1. Louise Stephen
    2. John Hoover
    3. Patty Anderson
    4. Samuel Said
    5. Stephen Wakefield
    6. 据我所知,这些不是正确的值。请告知。

2 个答案:

答案 0 :(得分:1)

您需要两次递增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++;行。

答案 1 :(得分:0)

至少有一个逻辑错误。每次内循环迭代时index递增两次。