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

时间:2013-04-05 11:54:06

标签: c++ arrays visual-c++ sorting alphabetized

所以我读了五六篇关于如何重新排列数组的帖子,有些按字母顺序排列数字,我也阅读了这一章。这就是我最终提出来的,

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来按字母方式进行字母顺序排列,但是有些字符串具有相同的姓氏和不同的名字,所以它也不会起作用。

我需要修复什么才能让我的排序按字母顺序排列我的数组?

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

3 个答案:

答案 0 :(得分:1)

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

我想请你注意:

  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,你可能会更好用)

答案 1 :(得分:1)

当你array[count + 1]count == size - 1时)时,有一个明显的出界问题。而且我没看到代码如何 将要排序任何东西。你想要什么算法 使用?

答案 2 :(得分:1)

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