-
버블 정렬(Bubble Sort) + C로 작성한 코드Algorithm/Programmers codes 2020. 1. 14. 20:31
Procedure
- 인접한 두 데이터를 SWAP하는 정렬
- 비교하고 교환하는 과정이 왼쪽에서부터 오른쪽으로 진행된다.
- 붙어있는 데이터를 비교하는 게 거품같다고 해서 버블 정렬이라고 한다.
- stable sort이다.
Example
- [ 5, 3, 8, 1, 2, 7] 이라는 배열 A가 있다고 하자.
- 첫 번째 반복의 절차는 아래 그림과 같다.
- 첫 번째 정렬이 끝나면 가장 오른쪽에 가장 큰 수인 '8'이 위치한다.
- 이런 식으로 총 5번을 반복하면 [ 1, 2, 3, 5, 7, 8 ]로 정렬이 된다.
장점
- 구현이 간단하다
단점
- 어떤 데이터가 정렬 후의 위치와 같게 있다 하더라도 근접한 데이터에 따라 이동할 수 있다 (비효율적)
- 한 데이터를 오른쪽으로 이동시키기 위해 모든 데이터들과 비교해야 한다.
# N개의 정수를 포인터를 이용하여 버블정렬하는 코드를 작성해보자.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void bubbleSort(int N, int* a) { int tmp = 0; for (int i = N; i > 0; i--) for (int j = 0; j < i-1; j++) if (a[j] > a[j + 1]) { tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp; } } int main() { int N, *arr; printf("정수의 개수 : "); scanf("%d", &N); arr = (int*)malloc(sizeof(int) * N); printf("정수 %d개 입력 : ", N); for (int i = 0; i < N; i++) scanf("%d", &arr[i]); printf("버블 정렬 전 : "); for (int i = 0; i < N; i++) i == N - 1 ? printf("%d\n",arr[i]) : printf("%d ", arr[i]); bubbleSort(N, arr); printf("버블 정렬 후 : "); for (int i = 0; i < N; i++) i == N - 1 ? printf("%d\n", arr[i]) : printf("%d ", arr[i]); }
'Algorithm > Programmers codes' 카테고리의 다른 글
[프로그래머스/Python] 해시 level 3. 베스트앨범 (2) 2020.01.30 [프로그래머스/Python] 해시 level 2. 위장 (0) 2020.01.29 [프로그래머스/Python] 해시 level 2. 전화번호 목록 (0) 2020.01.29 [프로그래머스/Python] 해시 level 1. 완주하지 못한 선수 (0) 2020.01.29 [Algorithm] 동적계획법 (Dynamic Programming) (0) 2020.01.25