<버블 정렬, BubbleSort>
- 간단 개념
길이가 5인 배열에 정수 2, 3, 4, 1, 5가 저장되어 있다고 가정하고, 이것을 오름차순(ascending order)으로 정렬하면 순서가 1, 2, 3, 4, 5로 재배치될 것이고, 내림차순(descending order)으로 정렬하면 순서가 5, 4, 3, 2, 1로 재배치 될 것이다.
1. 오름차순 버블 정렬
풀이
가장 먼저 해야 할 일은 배열의 가장 큰 값을 배열의 마지막으로 보내는 것이다. 이는 앞에서부터 두 개의 수를 비교해서 큰 수를 뒤로 보내면 된다. 그렇게 되면 배열의 마지막 자리는 가장 큰 값이 자리잡고 있기 때문에 마지막 자리를 건드릴 필요가 없다. 그리고 그 다음 큰 값을 배열의 마지막 자리 바로 앞으로 배치시켜야 한다. 이런 식으로 반복하면 버블 정렬이 완성된다.
#include <stdio.h>
void BubbleSort(int ary[], int len)
{
int temp;
for (int i = 0; i < len - 1; i++)
for (int j = 0; j < len - 1 - i; j++)
if (ary[j] > ary[j + 1])
{
temp = ary[j];
ary[j] = ary[j + 1];
ary[j + 1] = temp;
}
}
int main(void)
{
int arr[5];
printf("오름차순으로 정렬할 5개의 숫자를 입력하시오. \n");
for (int i = 0; i < 5; i++)
{
printf("입력 : ");
scanf_s("%d", &arr[i]);
}
BubbleSort(arr, sizeof(arr) / sizeof(int));
for (int i = 0; i < 5; i++)
printf("%d ", arr[i]);
return 0;
}
2. 내림차순 버블 정렬
#include <stdio.h>
void BubbleSort(int ary[], int len)
{
int temp;
for (int i = 0; i < len - 1; i++)
for (int j = 0; j < len - 1 - i; j++)
if (ary[j] < ary[j + 1])
{
temp = ary[j];
ary[j] = ary[j + 1];
ary[j + 1] = temp;
}
}
int main(void)
{
int arr[5];
printf("내림차순으로 정렬할 5개의 숫자를 입력하시오. \n");
for (int i = 0; i < 5; i++)
{
printf("입력 : ");
scanf_s("%d", &arr[i]);
}
BubbleSort(arr, sizeof(arr) / sizeof(int));
for (int i = 0; i < 5; i++)
printf("%d ", arr[i]);
return 0;
}