class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
def partition(left,right):
pivot = left
while left<right:
while left<right and nums[right]>=nums[pivot]:
right-=1
while left<right and nums[left]<=nums[pivot]:
left+=1
nums[left],nums[right]=nums[right],nums[left]
nums[left],nums[pivot] = nums[pivot],nums[left]
return left
k = len(nums)-k
if k>=len(nums):
return nums[-1]
left,right = 0,len(nums)-1
while True:
idx = partition(left,right)
if idx==k:
return nums[idx]
elif idx>k:
right = idx-1
else:
left = idx+1
排序算法稳定性:通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
快选希堆不稳定。