快速排序代码:
def qsort(arr, begin, end):
if end<=begin:
return
base = arr[begin]
i, j = begin, end
while i < j:
while arr[j]>=base and i<j:
j -= 1
if i<j:
arr[i] = arr[j]
i += 1
while arr[i]<=base and i<j:
i += 1
if i<j:
arr[j] = arr[i]
j -= 1
arr[i] = base # 中枢元素
qsort(arr, begin, i-1)
qsort(arr, i+1, end)
return arr
ar = [5,7,1,3,6,8,2,9]
arc = qsort(ar, 0, len(ar)-1)
results:[1, 2, 3, 5, 6, 7, 8, 9]
上面这个代码更容易理解,但是容易超时,在这道题力扣215题中造成超时错误。
优化过的代码如下:
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
def qsort(l, r):
if l >= r:
return
i, j = l, r
while i < j:
while i <j and nums[l]<=nums[j]: j-=1
while i <j and nums[l]>=nums[i]:i+=1
nums[i], nums[j] = nums[j], nums[i]
nums[l], nums[i] = nums[i], nums[l]
qsort(l, i-1)
qsort(i+1, r)
return
qsort(0, len(nums)-1)