버블정렬
두 인접한 원소를 검사하여 정렬하는 방법입니다.
시간 복잡도가 O(n^2) 로 느리지만, 코드가 단순하여 사용하기 편리합니다.
버블정렬의 알고리즘
1. 앞에서 두 개의 원소를 비교합니다.
2. 앞의 원소가 뒤의 원소보다 큰 경우 변경합니다. 작은 경우에는 변경하지 않습니다.
3. 다음 위치의 두 개의 원소를 비교합니다.
4. 위치의 끝까지 간 경우 다시 처음부터 비교합니다.
버블정렬의 예제
앞의 55 와 07 을 비교합니다. 07 이 55 보다 작으므로 위치를 변경합니다.
55 07 78 12 42 07 55 78 12 42
55 와 78 을 비교합니다. 55 가 작으므로 위치를 변경하지 않습니다.
78 과 12 를 비교합니다. 12 가 작으므로 위치를 변경합니다.
07 55 78 12 42 07 55 78 12 42 07 55 12 78 42
78 과 42 를 비교합니다. 42가 작으므로 위치를 변경합니다.
07 55 12 78 42 07 55 12 42 78
다시 앞에서부터 비교합니다.
07 과 55 를 비교합니다. 07 이 작으므로 위치를 변경하지 않습니다.
55 와 12 를 비교합니다. 12 가 작으므로 위치를 변경합니다.
07 55 12 42 78 07 12 55 42 78
위의 작업을 정렬이 끝날때까지 반복합니다.
버블정렬의 소스
#include <stdio.h> int main() { int temp[9] = { 3, 2, 1, 5, 4, 7, 8, 0, 6 }; int tempCount = 9; int hold=0, loop, i; for (loop = 0; loop < tempCount - 1; loop++) { for (i = 0; i < tempCount - 1 - loop; i++) { if (temp[i] > temp[i+1]) { hold = temp[i]; temp[i] = temp[i+1]; temp[i+1] = hold; } } } for (i = 0; i < tempCount; i++) { printf("%d ", temp[i]); } }
위키에 첨부된 소스에서 main 을 넣어 완성시킨 코드입니다.
'Computer Language > C' 카테고리의 다른 글
[C] 삽입정렬 개념, 알고리즘, 코드 정리 (0) | 2018.11.06 |
---|---|
[C] 선택정렬 개념, 알고리즘, 코드 정리 (0) | 2018.11.06 |
[C] 퀵정렬 개념, 알고리즘, 코드 정리 (0) | 2018.11.06 |
[C] gettimeofday 소스 수행 시간 차이 계산하기 (2) | 2018.06.28 |
[C] malloc, free 로 메모리 동적 할당 해제하기 (0) | 2018.06.27 |