任务描述
本关任务:对于给定的 n 个元素的数组
a[0:n-1]
,要求从中找出第 k 小的元素。
编程要求
请在右侧编辑器
Begin-End
处补充代码,完成本关任务,注意需要学生自己获取输入数据再进行操作。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:
10 5 //表示给定10(n)个元素的数组,从中找出第5(k)小的元素
-34 //此行及以下为具体的每个数据
95
-50
67
73
81
-38
10
-11
70
预期输出:第5小的元素是10
思路:
求第几个小的元素,那肯定需要排序,才能更好的去定位。
这里使用快速排序法
代码如下,想要详解代码发参考我的这篇文章http://t.csdnimg.cn/y1B1P
#include <stdio.h>
/********** Begin **********/
void quick_sort(int a[],int l,int r);
int main()
{
int n,k,i;
scanf("%d %d",&n,&k);
int a[n];
for (i=0;i<n;i++){
scanf("%d",&a[i]);
}
quick_sort(a,0,n-1);
printf("第%d小的元素是%d",k,a[k-1]);
return 0;
}
void quick_sort(int a[],int l,int r){
if(l>=r) return;
int left=l,right=r;
int p=a[left];
while(left<right){
while(left<right && a[right]>p) --right;
if(a[right]<p) a[left]=a[right];
while(left<right && a[left]<p) ++left;
if(a[left]>p) a[right]=a[left];
if(a[left]>=a[right]) a[left]=p;
}
quick_sort(a,l,right-1);
quick_sort(a,right+1,r);
}
/********** End **********/