按字母顺序排列字符串数组(甚至是*ptr)

Arranging an array of strings (or even a *ptr) alphabetically

本文关键字:ptr 数组 顺序 排列 字符串      更新时间:2023-10-16

我读了五六篇关于如何重新排列数组的文章,有些是按字母顺序排列的,有些是按数字顺序排列的,我也读了那一章。这是我最后想到的,

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以按字母顺序排列,但有些字符串具有相同的姓和不同的名,因此这也不起作用。

我需要修改什么来允许我的排序按字母顺序排列我的数组?

UPDATE更新了我在阅读注释和重新回顾本书后更改的代码。当运行代码时,我不再得到错误,但它仍然不排序!

所以出于某种原因你选择不使用std,(你有swap和sort)

我想提醒你注意:

  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,可能更适合您使用)

有一个明显的越界问题,当你做array[count + 1](当count == size - 1)。我不明白代码怎么将对任何东西进行排序。你在用什么算法使用?

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