思路:
主要利用快速排序的思想查找第K小的数,核心的思想就是快排的分治思想,具体思路:
1 利用快排的Parition()函数将数组分成两部分,返回基准值value,小于value的都在左边,大于的在右边
2 如果index刚好等于k,则说明index位置的数就是我们要找的数,如果值小于它,就肯定在左边,大于就在右边
3 递归在index的左边或者右边进行查找
/*
题目描述:寻找第K小的数
思路:快排一次划分
*/
template<class Type>
int Parition(Type * ar,int left,int right)
{
int value = ar[left];
while(left < right)
{
while(left < right && ar[right] > value)
{
right--;
}
ar[left] = ar[right];
while(left < right && ar[left] < value)
{
left++;
}
ar[right] = ar[left];
}
ar[left] = value;
return left;
}
template<class Type>
Type SelectK(Type *ar,int left,int right,int k)
{
if(left == right && k == 1) return ar[left];
int index = Parition(ar,left,right);
//主要思想代码//
int pos =