a
[알고리즘] 선택(Selection) 알고리즘
박은성/
2022. 3. 16. 15:41
반응형
선택 알고리즘 이란
입력 값들 가운데 k 번째로 작은 원소를 찾는 알고리즘이다.
입력된 배열 중, k번째로 작은 원소의 값을 구하려면,
퀵 정렬 알고리즘의 partition()함수를 호출한다. 이 함수의 리턴값을 통해, 찾으려는 k 의 인덱스가
피봇의 왼쪽에 있는지 오른쪽에 있는지 판별할 수 있다.
pivot < k ) 찾는 원소는 오른쪽 부분 배열에 있는 것이다.
pivot > k ) 찾는 원소는 왼쪽 부분 배열에 있는 것이다.
pivot == k ) 찾는 원소가 곧 pivot이다.
k가 어디있는지 알게 되면, 해당 부분 배열에 대해 selection 알고리즘을 recursive하게 수행한다.
pseudo code
patition(list[], p, r){
x <- list[r];
i <- p-1;
for(j<-p) to r-1
if(list[j] <= x) then list[++i] <-> list[j];
list[i+1] <-> list[r];
return i+1;
}
selection(list[], p, r, i){
// 배열 list[p...r]에서
// i번째 작은 원소를 찾는다.
if(p == r) then return list[p]; // 배열 list의 원소가 하나 뿐인 경우
q <- partition(list,p,r); //퀵 정렬 알고리즘의 partition 함수 호출
k <- q - p +1; //기준이 되는 피봇 k가 ???
if(i < k) then return select(list, p, q-1, i); //찾는 원소가 왼쪽 배열에 있는 경우
else if(i == k)
else return select(list, q+1, r, i-k);
}
반응형