2012-02-24 4 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]); 
} 
}