버블 정렬은 사람이 이해하기 쉬운 정렬이면서, 가성비가 좋지 않은 정렬이다.
버블 정렬의 원리는 배열의 앞뒤 값을 비교하면서, 큰 값을 뒤로 넘기는 과정을 반복하는 것이다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void BubbleSort(int arr[], int len);
int main(void) {
int arr[5] = { 4, 6, 1, 3, 9 };
int i;
BubbleSort(arr, 5);
// 정렬이 된 후 출력
for (i = 0; i < 5; i++)
printf("%d ", arr[i]);
return 0;
}
void BubbleSort(int arr[], int len) {
int temp;
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
첫번째 for문은 두번째 for문의 과정을 배열의 길이만큼 반복하기 위해 쓰는 것이다.
두번째 for문은 (정렬 되지 않은) 하나의 가장 큰 값을 맨 뒤로 보내기 위해 쓰는 것이다.
첫번째 for문에서 0부터 시작하기 때문에 len - 1
두번째 for문에서 len - i - 1 : i는 0부터 1씩 커지기에, 이미 뒤에 정렬된 값은 빼는 것이다.
두번째 for문 안에 if문의 역할은 "만약 앞의 값이 뒤의 값보다 크다면 두 개의 값을 Swap(바꾸기)하라"이다.
반응형