use*_*514 1 c++ sorting string pointers bubble-sort
你能告诉我我的方法有什么问题吗?我最终把每件事都做了同样的事情,而且实际上并没有排序.
void sortArrays(){
int i, j;
for(i=0; i<counter; i++){
for( j=0; j<i; j++){
if( strcmp(title_arr[i], title_arr[j]) < 0){
char* title_temp = title_arr[i];
title_arr[j] = title_temp;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*utz 10
这个:
char* title_temp = title_arr[i];
title_arr[j] = title_temp;
Run Code Online (Sandbox Code Playgroud)
相当于:
title_arr[j] = title_arr[i];
Run Code Online (Sandbox Code Playgroud)
你永远不会交换它们,你只需将它们复制到另一个.你应该添加这一行:
title_arr[i] = title_arr[j];
Run Code Online (Sandbox Code Playgroud)
介于两者之间.这样一来,你就覆盖[i]
有[j]
,但_temp
仍持有的旧值[i]
,这样你就可以复制到价值[j]
,从而交换他们.
我想这也是算法课程的时候了.您的算法称为"冒泡排序"算法.它以其简单而着称,但在现实环境中,它的效率低(技术术语是"teh sux",真正的技术术语是O(n^2)
("N平方")性能).一些更常见(和更有效)的算法包括Quicksort,合并排序和Heapsort等.有关测量算法可伸缩性的更多信息,请参阅有关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);
Run Code Online (Sandbox Code Playgroud)
我不打算刺std::sort
,但它会起作用(也许更容易).**
*请注意,任何喜欢的人都可以免费更改这些Wikipedia链接到Stack Overflow链接.链接到SO会更好,我只是链接到维基百科,因为我知道如何更快地找到我需要的信息.
**请注意,任何喜欢的人都可以免费添加std::sort
示例.我对C++还不够熟悉.