这是我的代码和输出。
我基本上使用选择排序作为我的算法。
#include <iostream>
using namespace std;
void stringSort(string array[], int size)
{
string temp;
int minIndex;
for(int count=0;count<size-1; count++)
{
minIndex=count;
for(int index=count+1;index<size;index++)
{
if(array[index]<=array[minIndex])
{
minIndex = index;
}
temp = array[count];
array[count] = array[minIndex];
array[minIndex] = temp;
}
}
}
int main()
{
string name[] =
{ "Los Angeles ", "Boise", "Chicago", "New Orleans", "Calais", "Boston", "Duluth", "Amarillo, TX "};
int numberOfCities;
numberOfCities = 8;
int i;
stringSort(name, numberOfCities);
for (i =0; i<numberOfCities; i++) {
cout<< name[i]<<endl;
}
return 0;
}
我的Xcode输出
Amarillo, TX
Boston
Boise
Calais
Duluth
Chicago
Los Angeles
New Orleans
这是错误的,因为芝加哥和德卢斯应该与博伊西+波士顿一起转换。其他一切都很好。是什么赋予了?
答案 0 :(得分:1)
您在内循环的每次迭代中都进行交换。使用选择排序,目标是循环遍历数组的其余部分以找到最小值,然后交换。每次迭代外循环时,最多只能交换一次。
而是试试这个:
for(int count=0;count<size-1; count++)
{
minIndex=count;
for(int index=count+1;index<size;index++)
{
if(array[index]<=array[minIndex])
{
minIndex = index;
}
}
temp = array[count];
array[count] = array[minIndex];
array[minIndex] = temp;
}