입력 코드
#include <stdio.h>
int A[5000000];
void swap(int *a, int *b) {
int tmp=*a;
*a=*b;
*b=tmp;
}
int partition(int lo, int hi) {
int i, j, p;
p=A[(lo+hi)/2];
i=lo-1;
j=hi+1;
while(1){
while(A[++i]<p);
while(p<A[--j]);
if(i>=j){
break;
}
swap(&A[i], &A[j]);
}
return i;
}
int qsearch(int lo, int hi, int k) {
int i, j, p;
if (lo==hi){
return A[lo];
}
i=lo-1;
j=hi+1;
p=A[(lo+hi)/2];
while(1){
while(A[++i]<p);
while(p<A[--j]);
if(i>=j){
break;
}
swap(&A[i], &A[j]);
}
if(i==j && i==k){
return p;
}
if(k<i){
return qsearch(lo, i-1, k);
}
else{
return qsearch(j+1, hi, k);
}
}
int main() {
int i, N, K;
scanf("%d %d", &N, &K);
for(i=0; i<N; i++){
scanf("%d", A+i);
}
printf("%d\n", qsearch(0, N-1, K-1));
return 0;
}
출처 www.acmicpc.net/source/21891306
코드 설명
#정렬
문제 출처
'C' 카테고리의 다른 글
#79. [백준_C언어] 11399 : ATM \ 정렬 (0) | 2021.02.15 |
---|---|
#78. [백준_C언어] 2220 : 힙 정렬 \ 정렬 (0) | 2021.02.15 |
#76. [백준_C언어] 2108 : 통계학 \ 정렬 (0) | 2021.02.13 |
#75. [백준_C언어] 11653 : 소인수분해 \ 수학 (0) | 2021.02.12 |
#74. [백준_C언어] 4948 : 베르트랑 공준 \ 수학 (0) | 2021.02.12 |