2014-12-03 3 views
-6

저는 C로 프로그래밍하는 것을 처음 접했고, 스스로 혼자 생각할 수없는 한 가지 문제 만 있습니다.C에서 2D 행렬을 정렬하십시오.

저는 2 차원 행렬을 만들었으며 버블 정렬을 사용하여 임의로 생성 된 100 개의 숫자를 모두 매트릭스에서 정렬해야합니다. 나중에 프로그램에서 사용하기 위해 결과를 저장해야합니다. 아무도 아이디어가 있니?

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

int main() { 
    int i, j, matrix[10][10]; 

    // Generate random numbers in a matrix 
    printf("Numbers generated:\n"); 
    srand((int)time(NULL)); 
    for(i=0; i<10; i++) { 
     for(j=0; j<9; j++) { 
      matrix[i][j] = (rand()%900) + 100; 
      printf("%d ", matrix[i][j]); 
     } 
     printf("\n"); 
    } 
    // Sort matrix 
    for(i=0; i<10; i++) { 
     for(j=0; j<10; j++) { 
      // Sort algorithm goes here 
     } 
    } 
    // Present sorted matrix 
    printf("\nSorted matrix:\n"); 
    for(i=0; i<10; i++) { 
     for(j=0; j<9; j++) { 
      printf("%d ", matrix[i][j]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

나는 대답에 대해 가장 감사 할 것입니다!

+2

그래, 우리는 대답을 제공하고 싶습니다. 질문이 있습니다. –

+1

이것은 숙제 응답 사이트가 아닙니다. 혼자서 시험해보고 붙어있을 때 여기에 오십시오. – Igor

+1

2 차원을 기준으로 정렬 할 수 없습니다. 그것은 말이되지 않습니다. 어느 쪽이 우선 순위를 차지합니까? 좌우 또는 상하입니다. 어떤 요소가 다른 요소에 남겨졌지만 다른 요소로 내려간다면 어떻게 될까요? 그것은 더 작거나 더 커야합니까? – sashoalm

답변

1
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include <string.h> 

void bubble_sort(void *base, size_t n, size_t size, 
       int (*cmp)(const void*, const void *)); 

int cmp_int(const void *a, const void *b){ 
    int x = *(const int *)a; 
    int y = *(const int *)b; 
    return x < y ? -1 : x > y; 
} 

int main() { 
    int i, j, matrix[10][10]; 

    // Generate random numbers in a matrix 
    printf("Numbers generated:\n"); 
    srand((unsigned)time(NULL)); 
    for(i=0; i<10; i++) { 
     for(j=0; j<10; j++) { 
      matrix[i][j] = rand()%900 + 100; 
      printf("%d ", matrix[i][j]); 
     } 
     printf("\n"); 
    } 
    // Sort matrix 
    for(i=0; i<10; i++) { 
     bubble_sort(matrix[i], 10, sizeof(**matrix), cmp_int);//sort column of row 
    } 
    bubble_sort(matrix, 10, sizeof(*matrix), cmp_int);//sort row by 1st column. 
    // Present sorted matrix 
    printf("\nSorted matrix:\n"); 
    for(i=0; i<10; i++) { 
     for(j=0; j<10; j++) { 
      printf("%d ", matrix[i][j]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

void swap(void *a, void *b, size_t size){ 
    void *temp = malloc(size); 
    memcpy(temp, a , size); 
    memcpy(a , b , size); 
    memcpy(b , temp, size); 
    free(temp); 
} 

void bubble_sort(void *base, size_t n, size_t size, int(*cmp)(const void*, const void *)){ 
    for(; n>0; --n){ 
     int i, swaped = 0; 
     for(i=0; i<n-1; ++i){ 
      void *a = (char*)base + i*size; 
      void *b = (char*)base + (i+1)*size; 
      if(cmp(a, b)>0){ 
       swap(a, b, size); 
       swaped = 1; 
      } 
     } 
     if(!swaped) 
      break; 
    } 
} 
+0

전체 정렬 :'bubble_sort (행렬, 10 * 10, sizeof (** 행렬), cmp_int);' – BLUEPIXY