快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
代码:
def quick_sort_standord(array,low,high):
if low<high:
key_index=partion(array,low,high)
quick_sort_standord(array,low,key_index)
quick_sort_standord(array,key_index+1,high)
def partion(array,low,high):
key=array[low]
while low<high:
while low<high and array[high]>=key:
high-=1
if low<high:
array[low]=array[high]
while low<high and array[low]<key:
low+=1
if low<high:
array[high]=array[low]
array[low]=key
return low
if __name__ == '__main__':
array2 = [9,3,2,1,4,6,7,0,5]
print(array2)
quick_sort_standord(array2,0,len(array2)-1)
print(array2)
"""簡單易懂方法"""
def QuickSort(alist, start, end):
'''快速排序'''
# 建立递归终止条件
if start >= end:
return
# low为序列左边要移动的游标
low = start
# last为序列右边要移动的游标
last = end
# 将起始元素设为要寻找位置的基准元素
mid_num = alist[start]
while low < last:
# 当low与last未重合,并且比基准元素要大,就将游标向左移动
while low < last and alist[last] >= mid_num:
last -= 1
# 如果比基准元素小,就跳出循环,并且把其放在基准元素左边
alist[low] = alist[last]
# 当low与last未重合,并且比基准元素要小,就将游标向右移动
while low < last and alist[low] < mid_num:
low += 1
# 如果比基准元素大,就跳出循环,并且把其放在基准元素右边
alist[last] = alist[low]
# 当low与last相等,就是mid_num的排序位置
alist[low] = mid_num
# 然后对排序好的元素左右两边的序列进行递归
QuickSort(alist, start, low - 1) # 对左边的序列进行递归
QuickSort(alist, low + 1, end) # 对右边的序列进行递归
if __name__ == '__main__':
alist = [30, 40, 60, 10, 20, 50]
# alist = [54,26,93,17,77,31,44,55,20]
print(alist)
QuickSort(alist, 0, len(alist) - 1)
print(alist)