# -*- encoding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第4章 数组 4.6 寻找数组中第小大的元素
题目:
寻找数组中第k小的元素
关键:
1 主函数中low = high必须保留
# 如果恰好 index是low = high的时候并且是第k小的元素,需要特殊处理
# 如果去除=号, [1, 1, 0, 0, 1, 0] 这个数组就无法得到正确结果
if low <= high:
index = partition(array, low, high)
if index == k - 1:
return array[index]
elif index > k - 1:
return findKthMin(array, low, index - 1, k)
else:
return findKthMin(array, index + 1, high, k)
2 划分函数中的主要逻辑
从后向前,找到小于枢轴的下标high
令前面的元素array[low] = array[high]
从前向后,找到大于枢轴的下标low
令后面的元素array[high] = array[low]
这样就将后面小于枢轴的元素和前面大于枢轴的元素进行了交换
参考:
Python程序员面试算法宝典
'''
def partition(array, low, high):
if not array or low > high:
return
value = array[low]
while low < high:
while low < high and array[high] >= value