从待排序列中挑出一个元素,作为"基准"(pivot),通过一趟排序,把所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准的后面(相同的数可以到任一边),这个称为分区(partition)操作。对前后两个区间重复此操作,直到前后分区的带下是0或1结束。每一次都确定待排序列中一个元素的位置。
def
QuickSort
(input_list,
left
,
right
):
def
Divsion
(input_list,
left
,
right
): # pivot为基准 # pivot = input_list[
left
]
while
left
<
right
:
while
left
<
right
and input_list[
right
] >= input_list[
left
]:
right
-=
1
# 找到一个元素小于基准元素,则把该元素放在前面 t=input_list[
left
] input_list[
left
] = input_list[
right
] input_list[
right
]=t
while
left
<
right
and input_list[
left
] <= input_list[
right
]:
left
+=
1
# 找到一个元素大于基准元素,则把该元素放到后面 t = input_list[
right
] input_list[
right
] = input_list[
left
] input_list[
left
]=t # 当
left
=
right
,即此时,
left
位置的左边都比基准元素小, #
left
元素右边都比基准元素大,此时把基准元素放入该位置, # 即该位置就是基准元素的最终排序位置
return
left
if
left
<
right
: pivot_index =
Divsion
(input_list,
left
,
right
)
print
(
"每执行本次分区后的结果:"
)
print
(input_list) # 用分治法对待排元素的左右两边分别递归进行
QuickSort
QuickSort
(input_list,
left
, pivot_index -
1
)
QuickSort
(input_list, pivot_index +
1
,
right
)
if
__name__ == '__main__': input_list = [
50
,
123
,
543
,
187
,
49
,
30
,
0
,
2
,
11
,
100
]
print
(
"input_list:"
)
print
(input_list)
QuickSort
(input_list,
0
, len(input_list) -
1
)
print
(
"sorted_list:"
)
print
(input_list)
更多学习资料可关注:itheimaGZ获取