我正在尝试制作一个能够实现' argv'并使用冒泡排序对其中的字符串进行排序。由于某种原因,冒泡排序不起作用,我无法找到问题。
void order(int howmany, char** strings)
{
int i = 0;
char* temp = (char*)malloc(sizeof(char)*20);
for (i = 1; i < howmany-1; i++)
{
if (strcmp(strings[i], strings[i + 1]) > 0)
{
strcpy(temp, strings[i]);
strcpy(strings[i], strings[i+1]);
strcpy(strings[i + 1], temp);
}
else if (strcmp(strings[i], strings[i + 1]) < 0)
{
continue;
}
else
{
continue;
}
}
}
答案 0 :(得分:3)
要对所有字符串进行排序,您需要多个循环。使用一个循环,您只需将第一个最小/最大的一个移动到适当的位置,然后算法停止。另外,为什么你从i = 1开始而不是0?就像你没有比较第一个字符串与其他字符串。 祝你好运
答案 1 :(得分:1)
这使用稍微优化的冒泡排序(在子序列过程中跳过不必要的比较)来自维基百科文章,翻译为C.因为我们正在排序非NULL char *
的数组(按{{的结果排序) 1}}在引用的字符串上),它交换指针,而不是字符串内容。
strcmp