Algorithm/Programmers codes

버블 정렬(Bubble Sort) + C로 작성한 코드

byolee 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]);
}