본문 바로가기
Language_/C programming

[c언어] 2차원 배열 정렬하기 (버블, 포인터, 2중 반복문)

by 낭람_ 2020. 3. 29.
반응형

[2차원 배열 정렬]


동아리 과제로 2차원 배열 정렬하기가 나와서 포인터 개념을 다시 잡을겸 포인터로 정렬을 해보았다.


[출력]

[13] [24] [53] [ 7] 
[ 4] [ 8] [11] [ 9] 
[23] [77] [45] [87] 
[43] [56] [98] [12] 

[ 4] [ 7] [ 8] [ 9] 
[11] [12] [13] [23] 
[24] [43] [45] [53] 
[56] [77] [87] [98] 


[c 코드]

#include<stdio.h>
void print_arr(int arr[][4], int col, int row) {
int i, j;
for(i=0; i<row; i++) {
for(j=0; j<col; j++) {
printf("[%2d] ",arr[i][j]);
}
printf("\n");
}
printf("\n");
}
int main() {
int arr[4][4] = {{13, 24, 53, 7},{4, 8, 11, 9},{23, 77, 45, 87},{43, 56, 98, 12}};
int i, j;
int col = sizeof(arr[0]) / sizeof(int);
int row = sizeof(arr) / sizeof(arr[0]);
int size = sizeof(arr) / sizeof(int);

print_arr(arr, col, row);
for(i=0; i<size;i++) {
for(j=0; j<size;j++) {
if(*(*arr+i) < *(*arr+j)) {
int tmp = *(*arr+j);
*(*arr+j) = *(*arr+i);
*(*arr+i) = tmp;
}
}
}
print_arr(arr, col, row);
return 0;
}


우선, print_arr함수는 2차원 배열을 출력 하기 위한 함수이다.

 

정렬은 버블정렬을 사용했고, 2차원배열이기 때문에 2중포인터를 사용했다. 


버블 정렬은 앞뒤를 비교하여 앞에있는 숫자가 크면 두 숫자의 위치를 변경하다.


버블 정렬의 시간 복잡도는 n^2로 최상, 최저, 평균 모두 같다.


ex) 

[2] [0] [5] [3] _ 2와 0을 비교 2 > 0, 2와 0의 위치 변경

[0] [2] [5] [3] _ 2와 5를 비교 2 < 5, 그대로

[0] [2] [5] [3] _ 5와 3을 비교 5 > 3, 5와 3의 위치 변경

[0] [2] [3] [5] _ 정렬 완료 (원래는 n^2번 돌아야 확실하게 정렬이 된다.)


https://velog.io/@2yeseul/%EB%B2%84%EB%B8%94%EC%A0%95%EB%A0%AC-Bubble-Sort


위 블로그에 있는 gif가 이해가 잘 된다.

반응형

댓글