728x90
https://www.youtube.com/watch?v=jpyslMwprao&list=PLVsNizTWUw7H9_of5YCB0FmsSc-K44y81&index=21
정렬 알고리즘
- 정렬(Sorting) 이란 데이터를 특정한 기준에 따라 순서대로 나열하는 것
- 일반적으로 문제 상황에 따라서 적절한 정렬 알고리즘이 공식처럼 사용됨
선택 정렬
- 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복한다
선택 정렬 동작 예시
- 정렬할 데이터를 준비한다
- [Step 0] 처리되지 않은 데이터 중 가장 작은 '0'을 선택해 가장 앞의 '7'과 바꾼다
- [Step 1] 처리되지 않은 데이터 중 가장 작은 '1'을 선택해 가장 앞의 '5'와 바꾼다
- [Step 2] 처리되지 않은 데이터 중 가장 작은 '2'를 선택해 가장 앞의 '9'와 바꾼다
- [Step 3] 처리되지 않은 데이터 중 가장 작은 '3'을 선택해 가장 앞의 '7'과 바꾼다
- 이러한 과정을 반복하면 다음과 같이 정렬이 완료된다
선택 정렬 소스코드 (Python)
array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
for i in range(len(array)):
min_index = i # 가장 작은 원소의 인덱스
for j in range(i + 1, len(array)):
if array[min_index] > array[j]:
min_index = j
array[i], array[min_index] = array[min_index], array[i] # 스와프
print(array)
실행 결과
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
선택 정렬 소스코드 (Java)
import java.util.*;
public class Main {
public static void main(String[] args) {
int n = 10;
int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};
for (int i = 0; i < n; i++) {
int min_index = i; // 가장 작은 원소의 인덱스
for (int j = i + 1; j < n; j++) {
if (arr[min_index] > arr[j]) {
min_index = j;
}
}
// 스와프
int temp = arr[i];
arr[i] = arr[min_index];
arr[min_index] = temp;
}
for(int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
}
}
실행 결과
0 1 2 3 4 5 6 7 8 9
선택 정렬의 시간 복잡도
- 선택 정렬은 N번 만큼 가장 작은 수를 찾아서 맨 앞으로 보내야 한다
- 구현 방식에 따라서 사소한 오차는 있을 수 있지만, 전체 연산 횟수는 다음과 같다
𝑁 + (𝑁 - 1) + (𝑁 - 2) + ... + 2
- 이는 (𝑁² + 𝑁 - 2) / 2 로 표현할 수 있는데, 빅오 표기법에 따라서 O(N²) 이라고 작성한다
728x90
'CodingTest' 카테고리의 다른 글
[이것이 코딩 테스트다 with Python] 23강 퀵 정렬 (0) | 2021.01.04 |
---|---|
[이것이 코딩 테스트다 with Python] 22강 삽입 정렬 (0) | 2021.01.04 |
[이것이 코딩 테스트다 with Python] 20강 DFS & BFS 기초 문제 풀이 (0) | 2021.01.04 |
[이것이 코딩 테스트다 with Python] 19강 BFS 알고리즘 (0) | 2021.01.04 |
[이것이 코딩 테스트다 with Python] 18강 DFS 알고리즘 (0) | 2021.01.04 |
댓글