题目
给一个数组,查找第k小的元素
思路
采用快速排序的思路,递归查找,一轮结束以后如果j的位置=k+1,则就是第k小的数,若大于,则往左找,小于,则往右边找。
代码
def k_min(list,k):
pivot = list[0]
i,j = 1,len(list)-1
while i<=j:
if list[i] > pivot and list[j] <= pivot:
list[i],list[j] = list[j],list[i]
elif list[j] >= pivot:
j -= 1
elif list[i] < pivot :
i += 1
list[0],list[j] = list[j],pivot
if j+1 == k:
return list[j]
elif j+1 < k:
return k_min(list[j+1:],k-j-1)
elif j+1 > k:
return k_min(list[:j],k)