问题
求一个数组的第k大的元素
主要思想
在随机快速排序的基础上,发展而来的算法。已知随机快速排序从数组中随机选择一个数a,拿a进行比较后,假若,放在左边的m个数,都小于a,放在右边的n个数,都大于a。很明显,a在这些数中,属于第n+1大。
1.如果此时k=n+1,答案就找到了,返回a即可
2.如果此时k>n+1,说明你要找的这个数,小于a。去左边那一堆数里按照随机快速排序继续查找。(此时已经不能按第k大去搜索了,因为在左边那一堆里,你想要的数属于第k-(n+1)大)
3.如果此时k<n+1,说明你要找的这个数,大于a。去右边那一堆数里按照随机快速排序继续查找。(这里还是按第k大去搜索)
递归终止条件:k=n+1
最坏时间复杂度 : O(n^2)
平均时间复杂度 : O(n)
若有笔误,还请指正