为什么我的字符串数组在c ++中没有正确排序?

时间:2014-11-16 01:02:33

标签: c++ string sorting selection-sort

这是我的代码和输出。

我基本上使用选择排序作为我的算法。

#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

这是错误的,因为芝加哥和德卢斯应该与博伊西+波士顿一起转换。其他一切都很好。是什么赋予了?

1 个答案:

答案 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;
}