先进行快速排序得到有序序列,返回下标n-k即可

-- coding:utf-8 --

class Finder:

def findKth(self, a, n, K):
    if n<=1:
        return a[0]
    a=self.fast_sort(a, 0, n-1, K)
    return a[n-K]

def fast_sort(self,a,first,last,k):
    #递归最终退出条件
    if first>=last:
        return 

    low=first
    high=last
    temp=a[first]

    while low<high:
        #从后往前找,找到一个就交换
        while a[high]>=temp and low<high:
            high-=1
        a[low]=a[high]

        #从前往后找,找到一个就交换
        while a[low]<temp and low<high:
            low+=1
        a[high]=a[low]

    #将参考值放到中间,此时low=high
    a[low]=temp

    #递归遍历标准值右边子序列
    self.fast_sort(a, low+1, last, k)

    #递归遍历标准值左边子序列    
    self.fast_sort(a, first, low, k)

    return a

常规解法:半快速排序+递归

每一次二分排序结束,此时游标值为low,有序序列长度为n,
n-low=k:返回a[low]
n-low>k:递归遍历右边序列
n-low<k:递归遍历左边序列

-- coding:utf-8 --

class Finder:
def findKth(self, a, n, K):
return self.fast_sort(a, 0, n-1, n,K) if n>1 else a[0]

def fast_sort(self,a,first,last,n,k):

    low=first
    high=last
    temp=a[first]

    while low<high:
        #从后往前找,找到一个就交换
        while a[high]>=temp and low<high:
            high-=1
        a[low]=a[high]

        #从前往后找,找到一个就交换
        while a[low]<temp and low<high:
            low+=1
        a[high]=a[low]

    #将参考值放到中间,此时low=high
    a[low]=temp

    if n-low==k:
        return temp

    #递归遍历标准值右边子序列
    elif n-low>k:
        return self.fast_sort(a, low+1, last,n, k)

    #递归遍历标准值左边子序列    
    else:
        return self.fast_sort(a, first, low,n, k)