使用C 中的一系列字符串的选择排序

Using selection sort with an array of strings in c++

本文关键字:选择 排序 字符串 一系列 使用      更新时间:2023-10-16

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

#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:nn";
    for(int i = 0; i < currentIteration; i++){
        cout << "Index " << i << ": " << friends[i] << endl;
    }
    selectionSort(friends,5);
    cout << "nAfter Sort: nn";
    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;
    }
}

我正在使用我的朋友的文本文件,该文件包含以下顺序

  1. 塞缪尔说
  2. 路易丝·斯蒂芬
  3. Stephen Wakefield
  4. 帕蒂·安德森(Patty Anderson(
  5. 约翰·胡佛

当我运行选择排序时,我以此顺序获得了此序列。

  1. 路易丝·斯蒂芬
  2. 约翰·胡佛
  3. 帕蒂·安德森(Patty Anderson(
  4. 塞缪尔说
  5. Stephen Wakefield

据我了解,这些不是正确的值。请告知

您是两次增量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++;行。

至少有一个逻辑错误。index在您的内部循环的迭代中被递增两次。