Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;字符指针的排序数组_C++_String_Sorting_Pointers_Bubble Sort - Fatal编程技术网

C++ C++;字符指针的排序数组

C++ C++;字符指针的排序数组,c++,string,sorting,pointers,bubble-sort,C++,String,Sorting,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 = titl

你能告诉我我的方法有什么问题吗?最后我把同样的东西放在了每一个地方,实际上它并没有分类

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;





            }

        }

    }
void sortarray(){
int i,j;
对于(i=0;i

相当于:

title_arr[j] = title_arr[i];
您从不交换它们,只需将一个复制到另一个。您应该添加以下行:

title_arr[i] = title_arr[j];
在两者之间。这样,您将用
[j]
覆盖
[i]
,但是
\u temp
仍然保留
[i]
的旧值,因此您可以将该值复制到
[j]
,从而进行交换

我想现在也是上算法课的时候了。你的算法被称为算法。它以简单著称,但在现实环境中,它以效率低下而闻名(技术术语是“teh sux”,真正的技术术语是
O(n^2)
(“n平方”)性能)。一些更常见(也更有效)算法包括,和,以及其他许多。有关测量算法可伸缩性的更多信息,请参阅上的文章*

但是,正如vava在评论中指出的那样,除非您的任务是编写自己的排序函数,否则使用
qsort
(C)或
std::sort
(C++)将获得更好的性能

我不打算尝试std::sort,但它的工作原理大致相同(可能更简单)**

*请注意,任何喜欢的人都可以将这些Wikipedia链接自由更改为堆栈溢出链接。最好链接到。因此,我只链接到Wikipedia,因为我知道如何更快地找到我需要的信息。
**注意,任何喜欢的人都可以随意添加<代码> STD::排序< /COD>示例。我对C++不够熟悉。

< P>:

相当于:

title_arr[j] = title_arr[i];
您从不交换它们,只需将一个复制到另一个。您应该添加以下行:

title_arr[i] = title_arr[j];
在两者之间。这样,您将用
[j]
覆盖
[i]
,但是
\u temp
仍然保留
[i]
的旧值,因此您可以将该值复制到
[j]
,从而进行交换

我想现在也是上算法课的时候了。你的算法被称为算法。它以简单著称,但在现实环境中,它以效率低下而闻名(技术术语是“teh sux”,真正的技术术语是
O(n^2)
(“n平方”)性能)。一些更常见(也更有效)算法包括,和,以及其他许多。有关测量算法可伸缩性的更多信息,请参阅上的文章*

但是,正如vava在评论中指出的那样,除非您的任务是编写自己的排序函数,否则使用
qsort
(C)或
std::sort
(C++)将获得更好的性能

我不打算尝试std::sort,但它的工作原理大致相同(可能更简单)**

*请注意,任何喜欢的人都可以将这些Wikipedia链接自由更改为堆栈溢出链接。最好链接到。因此,我只链接到Wikipedia,因为我知道如何更快地找到我需要的信息。

**注意,任何喜欢的人都可以免费添加一个<代码> STD::排序示例。我对C++不够熟悉。

< P>你没有正确地交换,这就是为什么它不起作用。

#include <iostream>
#include <algorithm>

int const counter = 4;
char * title_arr[counter] = {
    "d", "c", "b", "a"
};

void sortArrays(){
    for(int i = 0; i < counter; i++){
        for(int j = 0; j < i; j++){
            if(strcmp(title_arr[i], title_arr[j]) < 0){
                char* title_temp = title_arr[i];
                title_arr[i] = title_arr[j];
                title_arr[j] = title_temp;
                //you wouldn't have made that stupid mistake this way.
                //std::swap(title_arr[i], title_arr[j]);
            }
        }
    }
}

int compare(void const * a, void const * b) {
    return strcmp(static_cast<char const *>(a), static_cast<char const *>(b));
}

struct StringLess : public std::binary_function<char const *, char const *, bool> {
    bool operator() (char const * a, char const * b) const {
        return strcmp(a, b) < 0;
    }
};

int main(int argc, char * argv[])
{
    sortArrays();
    //those ones better
//  qsort(title_arr, counter, sizeof(char *), compare);
//  std::sort(title_arr, title_arr + counter, StringLess());
    for (int i = 0; i < counter; i++) {
        std::cout << title_arr[i] << ", ";
    }
    return 0;
}
#包括
#包括
int const计数器=4;
char*title_arr[计数器]={
“d”、“c”、“b”、“a”
};
void sortarray(){
对于(int i=0;istd::cout您没有正确交换,这就是它不起作用的原因

#include <iostream>
#include <algorithm>

int const counter = 4;
char * title_arr[counter] = {
    "d", "c", "b", "a"
};

void sortArrays(){
    for(int i = 0; i < counter; i++){
        for(int j = 0; j < i; j++){
            if(strcmp(title_arr[i], title_arr[j]) < 0){
                char* title_temp = title_arr[i];
                title_arr[i] = title_arr[j];
                title_arr[j] = title_temp;
                //you wouldn't have made that stupid mistake this way.
                //std::swap(title_arr[i], title_arr[j]);
            }
        }
    }
}

int compare(void const * a, void const * b) {
    return strcmp(static_cast<char const *>(a), static_cast<char const *>(b));
}

struct StringLess : public std::binary_function<char const *, char const *, bool> {
    bool operator() (char const * a, char const * b) const {
        return strcmp(a, b) < 0;
    }
};

int main(int argc, char * argv[])
{
    sortArrays();
    //those ones better
//  qsort(title_arr, counter, sizeof(char *), compare);
//  std::sort(title_arr, title_arr + counter, StringLess());
    for (int i = 0; i < counter; i++) {
        std::cout << title_arr[i] << ", ";
    }
    return 0;
}
#包括
#包括
int const计数器=4;
char*title_arr[计数器]={
“d”、“c”、“b”、“a”
};
void sortarray(){
对于(int i=0;i
1.不要使用全局变量。最好将数组和长度作为参数传递给排序函数。为什么?您的函数不可重用。如果您需要对另一个数组进行排序怎么办?是的,您需要编写另一个排序函数…
2.更高级的提示:使用高阶函数的模拟。如果您不仅需要对字符进行排序,还需要对整型、浮点数、字符串或您自己的类型进行排序,该怎么办?在这种情况下,您还可以将compare()函数传递到您的排序函数中,该函数可以比较数组中的对象。