선택 알고리즘
n개의 원소가 불규칙하게 저장된 배열에서
i번재 큰(or 작은)원소를 찾는 알고리즘
정렬과 비슷하다
두 가지 알고리즘
- 평균적으로 선형시간이 소용되는 알고리즘
- 최악의 경우에 선형시간이 소요되는 알고리즘
평균적으로 선형시간이 소용되는 알고리즘
배열 A에서 i 번째 원소 찾기
- 원소가 하나뿐인 경우, 하나 리턴
- 원소가 다수의 경우, 파티션(퀵 정렬)을 통해 중간값이 몇 번째인지 확인
- 중간값이 i와 같을 경우, A[파티션 통해 얻은 중간]값 리턴
- 중간값이 i보다 클 경우, 오른쪽 그룹으로 범위를 좁혀 재귀
- 중간값이 i작을 경우, 왼쪽 그룹으로 범위를 좁혀 재귀
예시 1
2번째 작은 원소 찾기
[31] [8] [48] [73] [11] [3] [20] [29] [65] [15]
마지막수 15를 기준으로 퀵정렬 해준다.
이 말은 15보다 작으면 왼쪽, 크면 오른쪽으로 정렬해주는거다.
이렇게 정렬되겠지
[8] [11] [3] [15] [31] [48] [20] [29] [65] [73]
문제를 다시 읽어보자 2번째 작은 원소니까
왼쪽 그룹 [8] [11] [3]에서 찾으면 되겠다.
다시 마지막 수 3을 기준으로 잡고 퀵정렬을 해준다.
그럼
[3] [8] [11]
뒤에 [8] [11]을 비교해서
8이 2번째 작은 수로 판명이 났다.
예시 2
7번째 작은 원소 찾기
[31] [8] [48] [73] [11] [3] [20] [29] [65] [15]
다시 한번 마지막수 15를 기준으로 퀵정렬 해준다.
[8] [11] [3] [15] [31] [48] [20] [29] [65] [73]
15를 포함해서 왼쪽 그룹 [8] [11] [3] [15]는,
순서가 필요없이 제일 작은 4개의 원소다.
그 말은 남은 [31] [48] [20] [29] [65] [73]에서 3번째 작은 원소를 찾는다!
'Computer Science > Algorithm :: 알고리즘' 카테고리의 다른 글
[알고리즘] 스택 - 먼저하면 늦게, 늦게하면 먼저 (0) | 2021.04.01 |
---|---|
[알고리즘] 리스트 - 선형, 단일 연결, 이중 연결, 원형 연결 (0) | 2021.04.01 |
[알고리즘] 기수 정렬 - 같은 자릿수 끼리끼리 비교 (0) | 2021.03.25 |
[알고리즘] 계수 정렬 - 신기하게 잘 찾아들어간다! (0) | 2021.03.25 |
[알고리즘] 트리 정렬 - 다시 정리 필요 (0) | 2021.03.25 |