**
线性时间选择问题
Description
给定线性序集中n个元素和一个整数k,n<=2000000,1<=k<=n,要求找出这n个元素中第k小的数。
Input
第一行有两个正整数n,k.
接下来是n个整数(0<=ai<=1e9)。
Output
输出第k小的数
Sample Input
6 3
1 3 5 2 4 6
Sample Output
3
基本思路
定义数组a存放数据,由于数据较多,用scanf进行输入。数组从0开始存入数据,所以第k大的数是排好序后的数组中的第k-1个。
用函数qSort对数组进行快排,函数partition查找数组的中位数,函数swap进行交换。
partition函数以a[l]为基准,从两端分别进行检查,如果a[i]<a[l],a[j]>a[l],什么都不执行,如果a[i]>a[l],a[j]<a[l],就调用swap函数,交换a[i]和a[j]的值,保证左边都是比a[l]小的值,右边都是比a[l]大的值。
如果中位数q比k的值小,说明要找的数在中位数左边,就从(l,q-1)重新找,如果q比k大,说明要找的数在中位数右边,从&