今天玩得时间比较多以至于只学习研究了一个算法,还是伪代码版。欢迎各位大牛指正学习
//快速寻找乱序中的第K个元素
思路:快速排序中主元的思想,主元左边是小于的
主元右边是大于的
伪代码如下:
seletK(A,p,r,k){
q=partition(A,p,r)//获取主元
qK = q-p+1//主元是第几个元素
if (k==qK) return A[q] //注意这里是取q,不是取qK
else if (k<qK)return seletK(A,p,q-1,k)
else (k>qK) return seletK(A,q+1,r,k-qK)//边界值考虑需要重新算
}
int partition(A,p,r)
pivot = A[p]
left = p+1
bigger=r
while(left<=bigger)
if (A[left]<=pivot)
left++;
else
swap(A,left,bigger)
bigger--
swap(A,p,bigger)
return bigger