1. 버블 정렬 (Bubble Sort) 이란?

  : 인접한 두 원소를 검사하여 정렬하는 방법

    원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보임

    코드가 단순해 자주 사용되는 정렬 알고리즘


무작위 배열수의 버블 정렬 예


2. 장단점


- 장점 : 코드가 단순하다


- 단점 : 느리다 ( T(n) = O(n2) )


3. 버블 정렬 실행 과정 (오름차순)


정렬할 배열


4

1

5

2

3


4 > 1 이므로 자리교체



4

1

5

2

3

1

4

5

2

3


4 < 5 이므로 자리교체 X


1

4

5

2

3


5 > 2 이므로 자리교체


1

4

5

2

3

1

4

2

5

3


5 > 3 이므로 자리교체 (가장 큰 수 5 고정됨)



1

4

2

5

3

1

4

2

3

5


1 < 4 이므로 자리교체 X


1

4

2

3

5


4 > 2 이므로 자리교체


1

4

2

3

5

1

2

4

3

5


4 > 3 이므로 자리교체 (두 번째로 큰 수 4 고정됨)


1

2

4

3

5

1

2

3

4

5


1 < 2 이므로 자리교체 X


1

2

3

4

5


2 < 3 이므로 자리교체 X (세 번째로 큰 수 3 고정됨)


1

2

3

4

5


1 < 2 이므로 자리교체 X (네 번째로 큰 수, 가장 작은 수 2, 1 고정됨)


1

2

3

4

5


4. C 언어 소스 코드 (오름차순)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#include <stdio.h>

 

int main() {

int arr[] = {31254};

int size = sizeof(arr) / sizeof(int);

int temp;


for (int i = 0; i < size - 1; i++) {

for (int j = 0; j < size - 1 - i; j++) {

if (arr[i] > arr[i + 1]) {

temp = arr[i];

arr[i] = arr[i + 1];

arr[i + 1] = temp;

}

}

}


for (int i = 0; i < size; i++) {

printf("%d ", arr[i]);

}

}


5. 성능 분석


- 시간 복잡도

  : T(n) = O(n2)



- 공간 복잡도

  : 제자리 정렬 (In-place sort)


    원소를 담는 공간 외에 옮겨지는 원소가 저장되는 공간 (위 소스 코드에서의 temp), 루프 변수 (위 소스 코드에서의 i, j) 만이 추가로 사용됨


※ 제자리 정렬 (In-place sort) 이란?

  : 원소들의 갯수에 비해 충분히 무시할 만한 저장 공간만을 더 사용하는 정렬 알고리즘


'알고리즘' 카테고리의 다른 글

알고리즘 성능 분석  (0) 2017.05.28
컴퓨터 알고리즘이란?  (0) 2017.05.26

1. 알고리즘 성능 분석


- 시간 복잡도 (Time Complexity)

  : 컴퓨터 알고리즘의 수행 시간

    수행 연산의 횟수를 비교하는 방식으로 분석

    입력크기 n에 대한 함수 T(n)으로 표기

    T(n)은 n에 대한 최고차 항만 고려


- 공간 복잡도 (Space Complexity)

  : 컴퓨터 알고리즘의 메모리 사용량


2. 시간 복잡도 분석 대상


- 산술 연산 (Arithmetic Calculation)

  : 덧셈, 곱셈, 나머지 연산자 등


- 데이터 입출력 (Data Movement)

  : 복사, 이동, 저장 등


- 제어 연산 (Access Control)

  : 조건문, 반복문 등


3. 점근 표기법 (Asymptotic Notation)


알고리즘의 성능은 점근 표기법을 이용해 표현한다.


- 대문자 O 표기법 (Big-O notation)

  : 상한 점근을 나타냄


    f(x) = O(g(x)) : x>x0를 만족하며 충분히 큰 x에 대해 |f(x)|≤M|g(x)|를 만족하는 양의 실수 M과 실수 x0이 존재


- 대문자 오메가 표기법 (Big-Ω notation)

  : 점근적 하한을 나타냄


    f(x) = Ω(g(x)) : x>x0를 만족하며 충분히 큰 x에 대해 |f(x)|≥M|g(x)|를 만족하는 양의 실수 M과 실수 x0이 존재


- 대문자 세타 표기법 (Big-Θ notation)

  : 점근적 상한 및 하한을 나타냄


    f(x) = Θ(g(x)) : x>x0를 만족하며 충분히 큰 x에 대해 M1|g(x)|≤f(x)|≤M2|g(x)|를 만족하는 양의 실수 M1, M2와 실수 x0이 존재

'알고리즘' 카테고리의 다른 글

버블 정렬 (Bubble Sort)  (0) 2017.05.28
컴퓨터 알고리즘이란?  (0) 2017.05.26

1. 컴퓨터 알고리즘이란?


: 컴퓨터를 이용하여 주어진 문제를 효율적으로 풀기 위한 방법 및 절차


2. 알고리즘의 조건


- 입력 : 외부에서 제공되는 자료가 0개 이상 존재해야한다.

- 출력 : 적어도 1개 이상의 서로 다른 결과를 내어야 한다.

- 명확성 : 수행 과정은 명확하고 모호하지 않은 명령어로 구성되어야 한다.

- 유한성(종결성) : 유한 번의 명령어를 수행 후 유한 시간 내에 종료한다.

- 효율성 : 모든 과정은 명백하게 실행/검증이 가능 한 것이어야 한다.


3. 컴퓨터를 이용한 문제 해결 4단계


- 1단계: 문제 정의 (Problem Definition)

해결하고자 하는 문제가 무엇인지를 정의하는 과정

알고리즘의 조건을 만족해야 함


- 2단계: 알고리즘 설명 (Algorithm Description)

컴퓨터가 수행해야 할 내용을 하나씩 차례대로 정의하는 과정


- 3단계: 정확성 증명 (Correctness Proof)

항상 올바른 답을 내보내고 정상적으로 종료되는지 증명하는 과정


- 4단계: 성능 분석 (Performance Analysis)

수행시간(Running Time), 사용공간(Space Consumption) 등 알고리즘의 성능을 분석하는 과정


참고 문헌


Tacademy 조호성 강사님

Wikipedia 알고리즘 문서


'알고리즘' 카테고리의 다른 글

버블 정렬 (Bubble Sort)  (0) 2017.05.28
알고리즘 성능 분석  (0) 2017.05.28

+ Recent posts