在C ++中按升序对数组进行排序

时间:2012-06-13 00:17:51

标签: c++ sorting

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

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++;

}

3 个答案:

答案 0 :(得分:2)

使用std::arraystd::stringstd::sort ...

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

如果您无法访问std::vectors,也可以轻松使用C阵列或std::array

答案 1 :(得分:1)

  

我想知道是否有一种功能可以轻松排序?

  • 尝试使用C ++构造,例如stringvectorsort。那么你的工作变得容易多了。
  • 但是,如果您想使用C,则可以查找qsort。您需要提供自定义比较器功能。
  

冒泡排序是最简单的吗?

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

答案 2 :(得分:1)

如果您希望它像您一样使用纯C,那么您就错过了strcmpqsort。请注意,您的代码使用C ++ 无所事事,这是一个经典的C代码,问题是错误的。如果您希望在C ++中完成,请参阅其他实际使用C ++容器的答案。如果您实际上没有使用C ++,那么使用C ++是没有意义的,而不仅仅是C!

下面是一个自包含的工作示例。请注意,您的2D数组和指向字符串的指针数组都有一个示例。您的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;
}