반응형
버블 정렬이란?
가장 왼쪽 원소부터 바로 오른쪽에 있는 원소와 비교해 가면서 큰수가 오른쪽으로 가도록 교환하는 것이다.
가장 오른쪽까지 가면 가장 큰 원소를 찾은것이므로, 이 과정을 다시 나머지 n-1개 수에 대해서 반복하는 정렬 방법이다.
시간복잡도는 (n-1) + (n-2) + … + 1 = n(n-1)/2 = Θ(n^2) 즉, O(n^2)이다.
버블 정렬 코드를 보면
첫번째 for문에서 i < n - 1은 결국 4 3 2 1이 있다면
첫번째 배열과 두번째 배열, 두번째 배열과 세번째 배열, 세번째 배열과 네번째 배열
총 3번 비교하는 것이기에 최대수 - 1인 것을 의미한다.
두번째 for문에서의 j < (n - i) - 1은 정렬이 완료될 때 마다 i가 1씩증가하여 정렬이 완료된 것을 빼주는 역할을 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <stdio.h> void BubbleSort(int arr[], int n) { int i, j; int temp; for(i = 0 ; i < n - 1; i++) { for (j = 0; j < (n - i) - 1; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } int main() { int arr[4] = { 3, 2, 4, 1 }; int i; BubbleSort(arr, sizeof(arr) / sizeof(int)); for (i = 0; i < 4; i++) printf("%d ", arr[i]); return 0; } // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘' 카테고리의 다른 글
병합 정렬(Merge Sort) (2) (0) | 2016.09.08 |
---|---|
병합 정렬(Merge Sort) (0) | 2016.08.30 |
std sort 알고리즘 (0) | 2016.08.22 |
다양한 Sorting을 보여주는 동영상 (0) | 2016.08.06 |
숫자의 각 자릿수 구하기 알고리즘 (10) | 2016.07.23 |