我遇到了在此选择排序上产生正确结果的问题。我觉得好像代码是正确的并且逻辑有效,但是根据我目前的理解,我得到的结果是不正确的。这是我的代码:
#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的文本文件,该文件按以下顺序包含以下名称
当我运行选择排序时,我按此顺序返回此序列。
据我所知,这些不是正确的值。请告知。
答案 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
递增两次。