5주차 미션

✔︎ 미션 3.

1. 미션 제목

정렬을 해보자

2. 지시문

여러분은 데이터를 정리하기 위해서 엑셀을 많이 사용하실 것입니다. 게다가, 데이터들을 보기 좋게 하기 위해서 정렬 기능을 많이 사용하실 텐데 간단한 버블 정렬 코드를 배열이 아닌 포인터를 활용하여 완성해 보세요.

예) main code는 다음과 같습니다. sort function 을 완성해보세요.

int main()
{
int n = 7;
int arr[7] = { 0, 25, 10, 17, 6, 12, 9 };
sort(n, arr);
return 0;
}

출력값 : 0, 6, 9, 10, 12, 17, 25

3. 핵심 개념

#sort #bubblesort #버블정렬

😎 제출 답안

#include <stdio.h>
void sort(int* arr, int arr_size);
void print_array(int* arr, int arr_size);
int main(void){
int arr[7] = { 0, 25, 10, 17, 6, 12, 9 };
int arr_size = sizeof(arr) / sizeof(int);
printf("정렬 전: ");
print_array(arr, arr_size);
sort(arr, arr_size);
printf("정렬 후: ");
print_array(arr, arr_size);
return 0;
}
void sort(int* arr, int arr_size){
int temp;
int count = 0;
for(int i = 0; i < arr_size; i++) {
count = 0;
for(int j = 0; j < arr_size - 1; j++) {
if(*(arr + j) > *(arr + j + 1)){
temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = temp;
count++;
printf("swap: ");
print_array(arr, arr_size); // 스왑되는 과정 출력
}
}
printf("count: %d\n", count); // count 횟수 출력
if(count == 0) break; // count가 0이면 빠져나옴으로써 시간복잡도 절약
}
}
void print_array(int* arr, int arr_size){
for(int i = 0; i < arr_size; i++)
printf("%d, ", *(arr + i));
printf("\n");
}

출력이미지

배열을 포인터를 사용하여 버블 정렬할 뿐만 아니라, 시간복잡도를 최적화하기 위해 count를 도입하여 더이상 교환이 없을시 끝마치는 로직을 넣었습니다. 또한 학습을 위해 매 교환마다 현재 배열의 상황을 출력하였습니다.