0

我正在尝试编写一个代码来实际按升序对我的数组进行排序,所以会发生什么说这就是我所拥有的。

char myListArray[10][40];
myListArray = "Yeah?",
              "Tomorrow",
              "Again",
              "I will see you";

所以发生的事情是它应该按 ASCII 值的顺序排序。

Again
I will see you
Tomorrow
Yeah?

我创造了这样的东西......

char temp[40];
temp[0] = '\0';           
int i, j, pos = 10, flag = 1;

for(i = 1; (i <= pos) && flag; i++)
{
    flag = 0;
    for (j=0; j < (pos -1); j++)
    {
        if (phrase[i][j+1] > phrase[i][j])     
        {
            strcpy(temp, phrase[i]);
            strcpy(phrase[i], phrase[i+1]);
            strcpy(phrase[i+1], temp);
            flag = 1;
        }
    }
}

现在我不知道我的逻辑有问题,我想知道是否有一个功能可以轻松排序?还是bubble sort最简单的?

更新:

我将接受以下答案之一,但我找到了如何以最简单的方式对数组进行排序的解决方案。

while(pos < 9){

  if(phrase[pos][i] > phrase[pos+1][i]){


   strcpy(temp, phrase[pos]);
   strcpy(phrase[pos], phrase[pos+1]);
   strcpy(phrase[pos+1], temp);
   flag = 1;

 if(flag = 1){

    pos = 0;

  }


  }

pos++;

}
4

3 回答 3

2

使用std::array,std::stringstd::sort...

std::array<std::string, 4> arr = { "Yeah?", "Tomorrow", "Again", "I will see you" };
std::sort(arr.begin(), arr.end());

这也可以很容易地适应使用 C 数组,或者std::vectors如果您无权访问std::array.

于 2012-06-13T00:37:19.383 回答
1

我想知道是否有一个简单的排序功能?

  • 尝试使用 C++ 结构,例如string,vectorsort. 那时你的工作就容易多了。
  • 但是,如果您想使用 C,您可以查找qsort. 不过,您将需要提供自定义比较器功能。

冒泡排序最简单?

排序算法的选择取决于最坏情况下的性能、元素数量等因素。考虑需要排序的元素数量。想想什么样的表现是可以接受的。IMO,实现冒泡排序与插入排序或 Shell 排序一样简单。合并排序/快速排序/基数排序OTOH,可能涉及更多。

于 2012-06-13T00:26:03.790 回答
1

如果您希望它像您看起来那样使用纯 C,那么您就错过了strcmpand qsort。请注意,您的代码与 C++无关,它是经典的 C 代码,问题被错误标记。如果您想在 C++ 中完成,请参阅其他实际使用 C++ 容器的答案。如果你实际上不使用 C++,你知道,使用 C++ 的部分,而不仅仅是 C,那么使用 C++ 是没有意义的!

下面是一个独立的工作示例。请注意,您的二维数组和指向字符串的指针数组都有一个示例。您的 2D 数组声明具有多余的第一个数组大小。这是不必要的,编译器知道有多少字符串。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void sort1(void)
{
    // 2D array
    char strings[][40] = {
        "Yeah?",
        "Tomorrow",
        "Again",
        "I will see you"
    };
    const int el_size = sizeof(strings[0]);
    const int el_count = sizeof(strings)/el_size;
    int i;
    printf("\n%s\n", __FUNCTION__);
    qsort(strings, el_count, el_size, strcmp);
    for (i = 0; i < el_count; ++i) {
        printf("%s\n", strings[i]);
    }
}

int strcmp_ptr(const char ** a, const char ** b)
{
    return strcmp(*a, *b);
}

void sort2(void)
{
    // Array of pointers to string constants
    const char * strings[] = {
        "Yeah?",
        "Tomorrow",
        "Again",
        "I will see you"
    };
    const int el_size = sizeof(strings[0]);
    const int el_count = sizeof(strings)/el_size;
    int i;
    printf("\n%s\n", __FUNCTION__);
    qsort(strings, el_count, el_size, strcmp_ptr);
    for (i = 0; i < el_count; ++i) {
        printf("%s\n", strings[i]);
    }
}

int main(void)
{
    sort1();
    sort2();
    return 0;
}
于 2012-06-13T03:24:45.390 回答