반응형
가장 짧고 간단한 코드로 나타낼 수 있는 정렬 알고리즘이다. 하지만 이러한 알고리즘이 다 그렇듯 단점은 거의 모든 상황에서 최악의 성능을 보인다는 점이다. 시간 복잡도는 O(n^2)이다.
적은 양의 데이터에서는 굳이 다른 정렬법을 쓰지 않아도 되는 성능을 발휘하지만, 현업에서는 방대한 양의 데이터를 관리하기 떄문에 버블정렬은 웬만해서는 안쓴다고 한다.
버블 정렬은 1번째와 2번째, 2번째와 3번쨰 .... n-1번째와 n번째를 비교하여 정렬하고 그 다음엔 n-2, n-1번째 까지, 그 다음엔 n-3, n-2번째 까지 하나씩 줄여가면서 정렬한다.
#include <stdio.h> #include <stdlib.h> #include <time.h> const int MAX_NUM = 100; void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } int main() { int arr[MAX_NUM]; int count = 0; int i, j; srand(time(NULL)); for (i = 0; i < MAX_NUM; i++) { arr[i] = rand() % 1000 + 1; } for (i = 0; i < MAX_NUM; i++) { for (j = 0; j < MAX_NUM - 1 - i; j++) { if (arr[j] > arr[j + 1]) { swap(arr + j, arr + j + 1); count++; } } } for (i = 0; i < MAX_NUM; i++) { printf("%d ", arr[i]); if ((i + 1) % 10 == 0) printf("\n"); } printf("정렬한 횟수 : %d\n", count); return 0; }
반응형
'알고리즘창고' 카테고리의 다른 글
[C] 보고 정렬 (bogo sort, stupid sort) (0) | 2018.07.13 |
---|---|
[C] 배열 기반 스택 (array stack) (0) | 2018.07.10 |
[C] 단일연결리스트 기반 스택 (single linked list stack) (0) | 2018.07.09 |