思路:
先從待排序的數(shù)組中找出一個數(shù)作為基準(zhǔn)數(shù)(取第一個數(shù)即可)瑟押,然后將原來的數(shù)組劃分成兩部分:小于基準(zhǔn)數(shù)的左子數(shù)組和大于等于基準(zhǔn)數(shù)的右子數(shù)組柿赊。然后對這兩個子數(shù)組再遞歸重復(fù)上述過程,直到兩個子數(shù)組的所有數(shù)都分別有序承桥。最后返回“左子數(shù)組” + “基準(zhǔn)數(shù)” + “右子數(shù)組”,即是最終排序好的數(shù)組。
代碼實(shí)現(xiàn)(一):
class Solution(object):
# 實(shí)現(xiàn)快排
def quicksort(self, nums):
if len(nums) <= 1:
return nums
# 左子數(shù)組
left = []
# 右子數(shù)組
right = []
# 基準(zhǔn)數(shù)
base = nums.pop()
print(nums)
# 對原數(shù)組進(jìn)行劃分
for x in nums:
if x < base:
left.append(x)
else:
right.append(x)
# 遞歸調(diào)用
return self.quicksort(right) + [base] + self.quicksort(left)
sulotion = Solution()
res = sulotion.quicksort(nums=[6, 5, 8, 0, 7])
print(res)
代碼實(shí)現(xiàn)(二):
def quick_sort(nums):
if len(nums) <= 1:
return nums
# 隨意選取一個基準(zhǔn)數(shù)部宿,比如選取列表第一個數(shù)
base = nums[0]
# left列表為nums中比基準(zhǔn)數(shù)base小或等于base的數(shù)組成的列表
left = [x for x in nums[1:] if x <= base]
# right列表為nums中比基準(zhǔn)數(shù)base大的數(shù)組成的列表
right = [x for x in nums[1:] if x > base]
# 對left和right列表遞歸排序
return quick_sort(left) + [base] + quick_sort(right)
res = quick_sort(nums=[6, 5, 8, 0, 7])
print(res)