-
[알고리즘] 선택(Selection) 알고리즘a 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); }
반응형'a' 카테고리의 다른 글
[JS] VScode 와 터미널 연결하기 (0) 2022.03.17 [알고리즘] 12221. 구구단2 (0) 2022.03.16 [알고리즘] 합병 정렬(Merge Sort) (0) 2022.03.15 [알고리즘] 퀵정렬 알고리즘 (0) 2022.03.14 [cuda-samples] 컴파일 오류 목록 (0) 2022.03.14