这:
char* title_temp = title_arr[i];
title_arr[j] = title_temp;
相当于:
title_arr[j] = title_arr[i];
你永远不会交换它们,你只是将一个复制到另一个。你应该添加这一行:
title_arr[i] = title_arr[j];
介于两者之间。这样,您将用 覆盖[i]
,[j]
但_temp
仍保留 的旧值[i]
,因此您可以将该值复制到[j]
中,从而交换它们。
我想这也是学习算法的时间。您的算法被称为“冒泡排序”算法。它以简单而闻名,但在现实环境中,它以效率低下而闻名(技术术语是“teh sux”,真正的技术术语是O(n^2)
(“N 平方”)性能)。一些更常见(和更有效)的算法包括快速排序、合并排序和堆排序等。有关测量算法可扩展性的更多信息,请参阅有关Big Oh 表示法的文章。*
但是,正如 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
,但它的工作原理大致相同(也许更容易)。**
*请注意,任何喜欢的人都可以自由地将这些 Wikipedia 链接更改为 Stack Overflow 链接。最好链接到 SO,我只是链接到 Wikipedia,因为我知道如何更快地找到我需要的信息。
**请注意,任何喜欢的人都可以自由添加std::sort
示例。我只是对 C++ 不够熟悉。