2012-02-24 85 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 2012-02-24 13:00:44

+0

謝謝..指出... – lakesh 2012-02-24 13:01:45

+0

你測試了這段代碼嗎? 'sort()'中'n'的初始值是什麼? 'numRows'和'numCols'的值是什麼?爲什麼將'arr'設置爲'numRows-1'和'numCols-1'? – 2012-02-24 13:05:43

回答

1

除非您真的想自己實施排序,只需使用qsort()即可。

+0

我需要爲該功能調用任何頭文件嗎?如果是這樣的話? – lakesh 2012-02-24 13:12:50

+0

@lakesh [谷歌是你的朋友。](http://www.elook.org/programming/c/qsort.html) – ArtemStorozhuk 2012-02-24 13:23:06

+0

哈哈。謝謝...我確實使用谷歌...自己找到它... – lakesh 2012-02-24 13:47:49

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]); 
} 
}