728x90
[ 버블 정렬이란? ]
- 기준값과 다음값을 비교해서 작은 값을 앞으로 가져옴
- 이 과정을 계속 반복해서 마지막까지 가면 정렬 완료
- 코드는 간단하지만 O(n^2)의 시간 복잡도를 가지는만큼 매우 비효율적인 정렬 방식
- 수행횟수 : 9 + 8 + 7 + ... + 1 = 9(9+1)/2 = n(n+1)/2
- 선택정렬보다 값을 교체(Swap)하는 수행 횟수가 많으므로 더 비효율적이고 느림
- arr[0] > arr[1] 이면 두 값을 바꿔줌
- arr[1] > arr[2] 이면 두 값을 바꿔줌
- ...반복...
- arr[8] > arr[9] 이면 두 값을 바꿔줌 (한 사이클 완료)
- arr[0] > arr[1] 이면 두 값을 바꿔줌
- ...반복...
- arr[7] > arr[8] 이면 두 값을 바꿔줌 (한 사이클 완료)
- ...반복...
![정렬알고리즘_버블정렬 [2/8] 정렬알고리즘_버블정렬 [2/8]](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
![정렬알고리즘_버블정렬 [2/8] 정렬알고리즘_버블정렬 [2/8]](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
#include <stdio.h>
#define SIZE 10
void main()
{
int arr[SIZE] = { 5,4,9,3,6,7,8,1,2,10 };
for (int i = SIZE - 2; i >= 0; --i) // 마지막 비교값은 arr[8], arr[9]
for (int j = 0; j <= i; ++j) // arr[0], arr[1]을 비교하고 끝내야함
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
for (int i = 0; i < SIZE; ++i)
printf("%d ", arr[i]);
}
728x90
'▸C언어 > 알고리즘 및 자료구조' 카테고리의 다른 글
정렬알고리즘_퀵 정렬 [4/8] (0) | 2019.12.09 |
---|---|
정렬알고리즘_삽입정렬 [3/8] (0) | 2019.12.09 |
정렬알고리즘_선택정렬 [1/8] (0) | 2019.12.09 |
재귀함수_팩토리얼 예제 [1/1] (0) | 2019.12.09 |
큐 구조_미로찾기 (최종 ver) [3/3] (5) | 2019.12.09 |
댓글