0

所以我已经阅读了大约五六篇关于如何重新排列数组的文章,有些是按字母顺序排列的,有些是按数字排列的,我还阅读了这一章。这是我最后想出来的,

void selectionSort (string array[], int size)
{
int startScan, minIndex;
string minValue;
for(startScan = 0; startScan<(size-1); startScan++)
{
    minIndex = startScan;
    minValue = array[startScan];
    string temp;
    for(int index = startScan+1; index<size; index++)
    if(array[index] <minValue)
    {
        minValue = array[index];
        minIndex = index;
    }
}
array[minIndex] = array[startScan];
array[startScan] = minValue;
system("pause");
}

显然,这是行不通的。当我运行它时,它向我抱怨需要打破它。我认为这会起作用,无论是 int 还是任何数字类型。哎呀,如果我将它设置为 char 类型的 ASCII 值,它甚至可能会运行。但实际的分配是一个字符串,我就是想不通。我想过尝试剪掉第一个字母并转换为 char 以按字母顺序排列,但有些字符串的姓氏相同,名字不同,所以这也行不通。

我需要解决什么问题才能让我的排序按字母顺序排列我的数组?

更新阅读评论并重新回顾本书后,更新了我在代码中所做的更改。运行代码时我不再收到错误,但它仍然没有排序!

4

3 回答 3

1

所以由于某种原因你选择不使用标准,(你有交换和排序)

我想请您注意:

  temp = array[count];
    array[count]=array[(count+1)]; <-- when count is exactly size -1 you are going to commit overflow to your array
    array[(count+1)] = temp;

您需要确保您的索引不会超出数组边界..:

for(int count = 0; count<size -1 ; count++)

(顺便说一句,看看 std::swap,可能更适合你使用)

于 2013-04-05T11:58:32.077 回答
1

array[count + 1]当您这样做时(何时count == size - 1),存在明显的越界问题。而且我看不到代码将如何对任何内容进行排序。你想用什么算法?

于 2013-04-05T11:58:44.240 回答
1

对于初学者,当您到达数组末尾时,您会得到一个索引越界异常。由于您正在访问 count+1,因此您的 for 循环需要在 size-1 处停止。这看起来像是冒泡排序的开始,但没有完全实现。对冒泡排序做一点研究,你应该很快就能得到答案。

于 2013-04-05T12:00:47.323 回答