第K个数
来源自acwing
标签:快速排序
1.代码
#include <stdio.h>
#define N 100010
int n, k;
int q[N];
void quick_sort(int *q, int l, int r){
//递归结束条件
if (l >= r) return;
//分区间
int x = q[(l+r) >> 1];
int i=l-1, j=r+1;
while (i < j){
do i++; while(q[i] < x);
do j--; while(q[j] > x);
if (i < j) {int t=q[i];q[i]=q[j], q[j]=t;} //swap
}
//递归处理子问题
quick_sort(q, l ,j);
quick_sort(q, j+1, r);
}
int main()
{
scanf("%d%d", &n , &k);
for (int i=0; i<n; i++) scanf("%d", &q[i]);
quick_sort(q, 0, n-1);
printf("%d", q[k-1]);
}
2.DEBUG
- MLE(Memory Limit Exceeded)问题
- 可能原因:递归未写递归结束条件,导致递归无限进行下去。
//递归结束条件 if (l >= r) return;