2012-06-13 96 views
0

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

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是最简单的?

UPDATE:

我会接受下面的答案之一,但我发现我的如何我在最简单的方法排序数组的解决方案。

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

} 
+1

http://en.wikipedia.org/wiki/Sorting_algorithm – trumpetlicks

+0

@trumpetlicks是的,我真的看到了,当我搜索并认为冒泡排序最慢,但我客我上面的代码认为是冒泡排序太? – Ali

+0

是的,林相当肯定你正在实施泡沫排序! – trumpetlicks

回答

2

使用std::arraystd::string,并且std::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访问。

+0

如果在我上面的情况下呢?我的意思是,如果所有这些字符串都存储在数组调用'phrase'中,那是'2D'数组,那我该如何对它们进行排序呢? – Ali

+0

@Ali:'std :: sort(phrase.begin(),phrase.end());'..?或者你的意思是C阵列? – ildjarn

+0

@ildjarn好,我不知道这是事,但是当我尝试它时,我有这个错误'错误:'排序'不是'std''的成员 – Ali

1

I wish to know if there is a function to sort easy way?

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

bubble sort is the easiest ?

排序算法的选择取决于多种因素,如最坏情况下的表现,想想你需要排序的元素数量元素的数量等。想想什么样的表现可以接受。国际海事组织,实施泡沫排序就像插入排序或壳牌排序一样简单。合并排序/快速排序/基数排序OTOH,可能稍微有点牵扯。

+0

谢谢我会在试图修复我自己的函数时寻找这些函数,而逻辑类一个混乱。 – Ali

1

如果你想要它使用普通的C,就像你似乎,那么你错过了strcmpqsort。请注意,你的代码有无关与C++,这是一个经典的C代码和问题是misagged。如果你想用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; 
}