1. 找出乙個樞紐節點key
2. 將陣列劃分成左右兩部分陣列,左邊陣列中的值都比樞紐節點的值小,右邊陣列中的節點的值都要key比樞紐節點key的值大
3. 對左邊陣列進行求解,返回排序後的陣列 left_arr
4. 對右邊資料進行求解,返回排序後的陣列 right_arr
5. 將左邊陣列和右邊陣列以及樞紐節點進行拼接
class solution():
def quick_sort(self, nums):
if len(nums) == 0 or len(nums) == 1:
return nums
less = list()
more = list()
mid = list()
key = nums[0]
for num in nums:
if num < key:
elif num > key:
else:
left_arr = self.quick_sort(less)
right_arr = self.quick_sort(more)
return left_arr + mid + right_arr
class solution_0():
def quick_sort(self, nums):
if len(nums) == 0 or len(nums) == 1:
return nums
left = 0
right = len(nums) - 1
key = nums[0]
while left < right:
while left < right and nums[right] >= key:
right -= 1
nums[left], nums[right] = nums[right], nums[left]
while left < right and nums[left] < key:
left += 1
nums[left], nums[right] = nums[right], nums[left]
nums[left] = key
left_arr = self.quick_sort(nums[:left])
right_arr = self.quick_sort(nums[left+1:])
return left_arr + [key] + right_arr
if __name__ == '__main__':
nums = [1, 2, 1, 0, 3, 9, 2]
res = solution_0().quick_sort(nums)
print(res)
排序演算法 快速排序超級總結
快速排序 一 介紹 快速排序和合併排序有點類似,兩者可以相互比較。快速排序也是像合併排序那樣將整個序列分成兩段分別進行排序。但是快速排序沒有合併排序的合併過程。該演算法是1960 年c.a.r.hoard提出的乙個非常好的排序演算法。快速排序演算法需要選擇乙個劃分元素,把小於劃分元素的元素放在它的左...
python快速排序排序 python快速排序
import random def rand n for i in range n yield random.randint 0,1000 建立乙個隨機數列表 def createlist n lists for i in rand n return lists 挖坑法快速排序 def quick ...
經典排序演算法 最易懂的快速排序介紹
include pragma warning disable 4996 void quicksort int arr,int left,int right 否則的話,如遞迴所有控制項路徑,函式將導致執行時堆疊溢位 int l left int r right int key arr left 找第乙...