반응형
[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가 이해가 잘 된다.
반응형
'Language_ > C programming' 카테고리의 다른 글
[c언어] 하트 출력하기 (0) | 2020.03.29 |
---|---|
[c언어] 한글자씩 출력 (타자기) (1) | 2020.03.29 |
[c언어] 피라미드 출력하기 (2중 반복문) (0) | 2020.03.27 |
[c언어] 가위바위보 프로그램 제작하기 (rand 이용) (5) | 2020.03.26 |
[C] 내림차순 정렬(버블) (0) | 2018.09.19 |
댓글