C++排序char指针数组

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++还不够熟悉.