2014-02-11 3 views
0

나는 두 배열이 있습니다다른 셀 값을 일정하게 유지 한 다음 Qsort를 적용하는 방법으로 2D 배열의 한 셀에서 값을 가져 오는 방법?

arr[] = {1,2,3,4,5,6}; 
arr1[] = {16,13,11,18,19,10}; 

을 나는 2 차원 배열처럼 보이는 있도록 2 차원 배열이 두 배열을 저장하고자 : 나는 열 값 등을 qsort가 수행 할 다음

A[6][2] = {{1,16},{2,13},{3,11},{4,18},{5,19},{6,10}}; 

및 이제 어레이 모양은 다음과 같습니다.

A[6][2] = {{6,10},{3,11},{2,13},{1,16},{4,18},{5,19}}; 

시도했지만 실패했습니다. 그래서이 문제를 해결하도록 도와주세요.
저는 초급입니다. 제 질문이 불충분하다면 제발 신경 쓰지 마세요.

+1

포스트 코드는 지금까지 다른 사람은 당신이 그것을를 해결하는 데 도움이 될 수 있도록. –

+0

2D 배열을 어떻게 정렬 하시겠습니까? 첫 번째 요소 만 사용하고 둘째 요소가 두 번째 요소에서 동일한 경우? –

+0

두 번째 요소를 기준으로 정렬 된 배열 10,11,13,16,18,19에서 시퀀스를 찾습니다. – ranaarjun

답변

3

샘플

#include <stdio.h> 
#include <stdlib.h> 

typedef int (*pair)[2]; 

pair zip(int n, int a1[n], int a2[n]){ 
    pair p = malloc(n * sizeof(*p)); 
    for(int i = 0; i < n ; ++i){ 
     p[i][0] = a1[i]; 
     p[i][1] = a2[i]; 
    } 
    return p; 
} 

int cmp(const void *a, const void *b){ 
    pair x = (pair)a; 
    pair y = (pair)b; 
    return x[0][1] < y[0][1] ? -1 : x[0][1] > y[0][1]; 
} 

int main(void){ 
    int arr[] = {1,2,3,4,5,6}; 
    int arr1[] = {16,13,11,18,19,10}; 
    int size = sizeof(arr)/sizeof(*arr); 
    pair A = zip(size, arr, arr1); 

    for(int i = 0;i<size;++i){ 
     printf("{"); 
     printf("{%d, %d}", A[i][0], A[i][1]); 
     if(i!=size-1) 
      printf(","); 
     else 
      printf("}\n"); 
    } 
    qsort(A, size, sizeof(*A), cmp); 
    for(int i = 0;i<size;++i){ 
     printf("{"); 
     printf("{%d, %d}", A[i][0], A[i][1]); 
     if(i!=size-1) 
      printf(","); 
     else 
      printf("}\n"); 
    } 
    return 0; 
}