快速排序学习:
从数组中找一flag,从左右两端向中间遍历,将大于flag的放左边,小于flag的放右边,flag放中间。
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
if nums==[] or nums==1:
return nums
flag=nums[0]
left=[]
right=[]
for index,item in enumerate(nums):
if index!=0:
if item<=flag:
left.append(item)
else:
right.append(item)
return self.sortArray(left)+[flag]+self.sortArray(right)
填坑法比较容易理解,在flag处挖一个坑,然后用其他的值不断的挪坑的方法,交换位置。达到上述要求。
https://zhuanlan.zhihu.com/p/93129029
https://www.runoob.com/w3cnote/quick-sort.html
使用填坑法完成的
215. 数组中的第K个最大元素
之前没有注意对等号的处理。遇到等于的情况,不需要再进行交换alist[high]>=midel
和alist[low]<=midel
都是向后移一个位置。start>=end
在开始等于结尾的情况下,说明只有一个元素,不需要排序。
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
nums=self.quick_sort(nums,0,len(nums)-1)
return nums[-k]
def quick_sort(self,alist,start, end):
if start>=end:
return alist
low=start
high=end
midel=alist[start]
while high>low:
while high>low and alist[high]>=midel:
high-=1
alist[low]=alist[high]
while high>low and alist[low]<=midel:
low+=1
alist[high]=alist[low]
alist[low]=midel
self.quick_sort(alist,start,low-1)
self.quick_sort(alist,low+1,end)
return alist