C++/자료구조

[C++] 정렬 #1 버블 정렬 & 선택 정렬 (Bubble Sort & Selection Sort)

노랑꼬리 2023. 6. 29. 12:10

목차

1. 정렬 알고리즘

2. 버블 정렬 (Bubble Sort)

3. 선택 정렬 (Selection Sort)

 


1. 정렬 알고리즘

- 원소들을 번호 순이나 사전 순 같이 일정한 순서로 열거하는 알고리즘

- 다른 알고리즘을 수행 하기 전 최적화를 위해 우선적으로 실행한다.

- 대표적인 정렬 알고리즘 6개가 존재한다.

ㄴ 버블 정렬, 선택 정렬, 삽입 정렬, 힙 정렬, 병합 정렬, 퀵 정렬

 

※ 시간 복잡도

Sorting Best Avg Worst
버블 정렬 O(n²) O(n²) O(n²)
선택 정렬 O(n²) O(n²) O(n²)
삽입 정렬 O(n) O(n²) O(n²)
힙 정렬 O(nlog₂n) O(nlog₂n) O(nlog₂n)
병합 정렬 O(nlog₂n) O(nlog₂n) O(nlog₂n)
퀵 정렬 O(nlog₂n) O(nlog₂n) O(n²)

 

 

2. 버블 정렬 (Bubble Sort)

- 서로 인접한 두 원소를 검사하여 정렬.

- 1회전 마다 정렬되지 않은 배열에서 최대(내림차순이라면 최소)값을 하나씩 정렬해나간다.

- 정렬 과정이 마치 거품이 올라오는 것 처럼 보여 버블 정렬이라 한다.

- 시간 복잡도가 O(n²)으로 느리다.

 

버블 정렬 애니메이션

가. 구현하기

버블 정렬 결과

 

3. 선택 정렬 (Selection Sort)

- 정렬할 구간에서 가장 작은 값을 찾아 맨 앞과 위치를 교환하여 정렬. (내림차순이라면 가장 큰 값)

- 1회전 마다 정렬되지 않은 배열의 최소(내림차순 이라면 최대) 값이 하나씩 정렬된다.

- 정렬할 원소를 선택하기 때문에 선택 정렬이라 한다.

- 시간 복잡도가 버블 정렬과 같은 O(n²) 이지만 버블 정렬보다 항상 빠르다.

ㄴ 정렬한 구간에서의 가장 작은 값(큰 값)을 제외 시키는데 버블 정렬은 여러번 swap를 해야하지만 선택 정렬은 단 한번의 swap이면 1회전이 가능하기 때문

 

선택 정렬 애니메이션 (출처 : 위키백과)

 

가. 구현하기

선택 정렬 결과

 

※ 참조

위키 백과 버블 정렬

https://ko.wikipedia.org/wiki/%EB%B2%84%EB%B8%94_%EC%A0%95%EB%A0%AC

위키 백과 선택 정렬

https://ko.wikipedia.org/wiki/%EC%84%A0%ED%83%9D_%EC%A0%95%EB%A0%AC