2012-02-24 28 views
0

私は2次元(3x7)の配列を持っています。私は行ごとにそれを並べ替えると思います。私はサンプルコードを書いています。2次元配列の行ごとにソート

#define numRows 3 
    #define numCols 7 
int arr[numRows-1][numCols-1] = {{0,1,2,3,4,5,6}, {7,8,9,10,11,12,13},{14,15,16,17,18,19,20}}; 

    sort_row(arr); 

    void sort_row(int *p) 
    { 
    for (int i = 0 ;i<numRows-1;i++) 
    { 
     sort(p[i][]); 
    } 
    } 

    void sort(int *p) 
    { 
     for (int c = 1 ; c <= numCols - 1 ; c++) 
     { 
      for (d = 0 ; d <= c - 1 ; d++) 
      { 
       if (array[c] < array[d]) 
       { 
        swap = array[d]; 
        array[d] = array[c]; 

       for (int k = c ; k > d ; k--) 
        array[k] = array[k-1];  

       array[k+1] = swap; 
       } 
      } 
     } 
    } 

各行に挿入の並べ替えをしています。

Qn:各行を適切に並べ替えていますか?どうすれば改善できますか?それは、コード

+0

注 'D '、' N 'と' swap'が宣言されていない変数です。 – hmjd

+0

ありがとうございました... – lakesh

+0

このコードをテストしましたか? 'sort()'の 'n'の初期値はどれですか? 'numRows'と' numCols'の値はどれですか?なぜ 'arr'は' numRows - 1'と 'numCols - 1'にディメンション化されていますか? –

答えて

1

ソートを実際に実装しない限り、qsort()を使用してください。

+0

私はその機能のためのヘッダーファイルを呼び出す必要がありますか? – lakesh

+0

@lakesh [Googleはあなたの友人です](http://www.elook.org/programming/c/qsort.html) – ArtemStorozhuk

+0

haha​​。ありがとう...私はそれを自分で見つけるためにGoogleを使った... – lakesh

0

ありませんで、私のミスを改善したり、指摘でき向上させるための提案を探してい

。 pはsort_rowのintへのポインタであると宣言されているので、p [i]はintであり、[]を適用できないはずで、sortはintへのポインタを期待しています。

また、関数外で実行可能な文(sort_rowの呼び出し)があります。

0

@unwind ANSに検索した後、この答えを思い付いた:

#include <stdlib.h> 
#define numRows 3 
#define numCols 7 
int arr[numRows-1][numCols-1] = {{0,1,2,3,4,5,6}, {7,8,9,10,11,12,13},{14,15,16,17,18,19,20}}; 
int compare (const void * a, const void * b) 
{ 
    return (*(int*)a - *(int*)b); 
} 
void sort_row(int *p) 
{ 
for (int i = 0 ;i<numRows-1;i++) 
{ 
    qsort (p[i], 7, sizeof(int), compare);//sort(p[i]); 
} 
}