此:
char* title_temp = title_arr[i];
title_arr[j] = title_temp;
等同于:
title_arr[j] = title_arr[i];
你永不掉它们,你只需要复制一个到另一个。你应该加上这一行:
title_arr[i] = title_arr[j];
在两者之间。这样,您将用[j]
覆盖,但_temp
仍然保留旧值[i]
,因此您可以将该值复制到[j]
中,从而交换它们。
我想这也是一个算法课的时间。您的算法被称为"bubble sort"算法。它以简单性着称,但在现实环境中,它被称为效率低下(技术术语是“tex sux”,真正的技术术语是O(n^2)
(“N平方”)性能)。一些更常见(和更有效)的算法包括Quicksort,merge sort和Heapsort等等。欲了解更多关于测量算法的可扩展性,看到一篇关于Big Oh notation *
但是,正如在VAVA评论所指出的,除非你的任务是写自己的排序功能,你要与qsort
,以获得更好的性能(在C)或std::sort
(在C++中)。
int mystrsort(const void *a, const void *b)
{
return strcmp(*(const char **)a, *(const char **)b);
}
// later:
qsort(title_arr, sizeof title_arr/sizeof(char *), sizeof(char *), mystrsort);
我不打算在std::sort
刺,但它会大致相同的(也许更容易)工作。**
*请注意,任何人谁喜欢自由地改变这些维基百科链接堆栈溢出链接。最好链接到SO,我只是链接到维基百科,因为我知道如何更快地找到我需要的信息。
**请注意,任何喜欢的人都可以自由添加std::sort
示例。我只是不太熟悉C++。
为什么不使用'qsort'或'std :: sort'? – vava
当您尝试使用自己的标准算法而不是使用提供的标准算法时,会发生这种情况。引入愚蠢的小错误太容易了。 –