Skip to content

Commit 7428065

Browse files
authored
Update 06.快速排序.py
1 parent 2b3a80b commit 7428065

File tree

1 file changed

+35
-4
lines changed

1 file changed

+35
-4
lines changed

十大排序算法/06.快速排序.py

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 先在数组中挑出一个“基准”元素,比它小的放左边,比它大的放右边
22

3-
# 逐一赋值形式
3+
# 递归,逐一赋值形式
44
def quick_sort(nums):
55
l, r = 0, len(nums)-1
66
# 数组为空或只有一个元素
@@ -20,8 +20,8 @@ def quick_sort(nums):
2020
return l_nums + [key] + r_nums
2121

2222

23-
# 两者交换形式
24-
def quick_sort2(nums):
23+
# 递归,两者交换形式
24+
def quick_sort(nums):
2525
l, r = 0, len(nums)-1
2626
if l >= r:
2727
return nums
@@ -38,6 +38,37 @@ def quick_sort2(nums):
3838
return l_nums + [nums[l]] + r_nums
3939

4040

41+
# 非递归,栈实现
42+
def quick_sort(nums):
43+
if len(nums) < 2:
44+
return nums
45+
stack = []
46+
stack.append(0)
47+
stack.append(len(nums)-1)
48+
while stack:
49+
l = stack.pop(0)
50+
r = stack.pop(0)
51+
index = partition(nums, l, r)
52+
if l < index:
53+
stack.append(l)
54+
stack.append(index-1)
55+
if r > index:
56+
stack.append(index+1)
57+
stack.append(r)
58+
return nums
59+
60+
def partition(nums, l, r):
61+
p = l
62+
while l < r:
63+
while l < r and nums[r] >= nums[p]:
64+
r -= 1
65+
while l < r and nums[l] < nums[p]:
66+
l += 1
67+
nums[l], nums[r] = nums[r], nums[l]
68+
nums[p], nums[l] = nums[l], nums[p]
69+
return l
70+
71+
4172
if __name__ == '__main__':
4273
nums = [2, 1, 6, 7, 9, 5, 0, 4, 3, 8]
43-
print(quick_sort(nums))
74+
print(quick_sort(nums))

0 commit comments

Comments
 (0)