找到一组数字中,第k小的数字
这个题目是:给定一个数组,找到数组中任意第k小的数字。看完这个题目,我想到的就是我把这个数组,进行排序。这时候我们想要第几小就可以得到第几小了哈,是不是很方便。
在选择的排序算法的时候我们尽量选择堆排序和选择排序,为什么呢?因为这两个排序算法,我们不需要将整个数组排序完,我们只需要将需要查找的排序出来就可以了。
但是这种方法肯定是费时的,我们可以用分治的思想去做,结合快排的一次划分来缩小规模。
对于快排的一次划分,我们可以将基准的这个数字放进数组中,他所在的位置,也就是说前面的数据都是他小,后面的数据都比他大。换句话说它的下标就是他在数组中的第几小,这样我们就可以扔掉一部分规模,依次来找到元素中的第几小。
这里我们列举了一部分,我们只需要将得到的值,如果大于需要的就在左边找,小于就在右边找。
template<class Type>
int Partition(Type *ar, int left, int right)
{
int i = left