C언어/주차별 문제

[10주차] 2차원 배열 정렬

슈슈버거 2023. 6. 6. 17:26

문제


내가 작성한 코드

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
void sort(int **ptr, int len); // sort 함수 선언

int main() {
    int n; //배열 크기
    scanf("%d", &n);

    int num[n][n]; //2차원 배열
    int list[n*n]; //정렬할 배열
    int l = 0;

    for(int i = 0; i<n; i++){
        for(int j = 0; j<n; j++){
            scanf("%d", &num[i][j]);
            list[l] = num[i][j];
            l++; 
        }
    }

    int*ptr = &list; //포인터에 리스트 저장

    sort(&ptr, n*n); //정렬함수 호출

    //결과 출력
    l = 0;
    for(int i = 0; i<n; i++){
        for(int j = 0; j<n; j++){
            printf("%d ", *(ptr+l));
            l++; 
        }
        printf("\n");
    }
 
    return 0;
}

void sort(int **ptr, int len){
    for(int i = 0; i<len; i++){ //정수 개수만큼 반복
        int min = *(*ptr+i); //최솟값 저장
        int minindex = i; //최솟값 인덱스 저장

        for(int j = i; j<len; j++){ //뒤까지 가며
            if(*(*ptr+j)<min){ //최솟값보다 작을 경우
                min = *(*ptr+j); //최솟값 갱신
                minindex = j; //인덱스도 갱신
            }
        }

        //자리 바꾸어주기
        int tmp = *(*ptr+i);
        *(*ptr+i) = *(*ptr+minindex);
        *(*ptr+minindex) = tmp;
    }
}