按字母顺序排列字符串数组(甚至是 *ptr)
Posted
技术标签:
【中文标题】按字母顺序排列字符串数组(甚至是 *ptr)【英文标题】:Arranging an array of strings (or even a *ptr) alphabetically 【发布时间】:2013-04-05 11:54:06 【问题描述】:所以我已经阅读了大约五六篇关于如何重新排列数组的文章,其中一些按字母顺序排列,一些按数字排列,我还阅读了这一章。这就是我最终想出的,
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 以按字母顺序排列,但有些字符串的姓氏相同但名字不同,所以这也行不通。
我需要解决什么问题才能让我的排序按字母顺序排列我的数组?
更新 更新了我在阅读 cmets 并重新回顾这本书后对代码所做的更改。运行代码时不再出现错误,但仍然无法排序!
【问题讨论】:
如果您所说的“呼喊”是指它给您一个错误,请显示该错误。std::sort
有什么问题?
您需要做的是正确实现选择排序。您的代码甚至不是选择排序。将您编写的代码与真实的选择排序进行比较,例如en.wikipedia.org/wiki/Selection_sort
@john 也不是任何其他类型的。 (他的代码是 O(n)。如果它真的实现了排序,那将是开创性的。)
James - 什么都没有,除了我不允许在作业中使用它。哦,我明白这个问题对你来说显然很愚蠢,但没必要成为刻薄的朋友,我只是想学习:(约翰 - 我实际上已经读过,我理解排序的概念(我认为),我只是显然不明白如何实现它。
【参考方案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,可能更适合你使用)
【讨论】:
谢谢,当分配使用数组时,我总是提醒自己要小心数组边界,然后我对它感到沮丧并且有时会忘记。 :/ 我希望我可以使用 STD 交换,但任务是修改 selectionSort 代码以对字符串进行排序。【参考方案2】:当您执行array[count
+ 1]
(count == size - 1
)时,存在明显的越界问题。而且我看不到代码如何
将要对任何东西进行排序。你想用什么算法
用吗?
【讨论】:
【参考方案3】:对于初学者,当您到达数组末尾时,您会得到一个索引越界异常。由于您正在访问 count+1,因此您的 for 循环需要在 size-1 处停止。这看起来像是冒泡排序的开始,但没有完全实现。对冒泡排序进行一些研究,您应该很快就会得到答案。
【讨论】:
感谢您让我注意到我正在尝试将冒泡排序与选择排序结合起来!诚然,我也遗漏了一些元素。以上是关于按字母顺序排列字符串数组(甚至是 *ptr)的主要内容,如果未能解决你的问题,请参考以下文章
带有名称和描述 numberOfRowsInSection 问题的按字母顺序排列的 plist
2021-09-25:给定一个字符串数组,将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词指字母相同,但排列不同的字符串。示例 1:输入: strs = [“eat“, “tea“, “