快速排序的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
根据这个基本思想,可以分为以下三个步骤:
1.从序列中选出一个元素,作为基准
2.将这个序列排序,把比基准小的元素放基准的前边,比基准大的元素放基准后边,
3.使用递归,把基准左边的元素作为一部分重复步骤1和2,右边部分同理,直到不满足递归条件
版本1:
def quick_sort(array, left, right):
"""快速排序"""
if left >= right:
return
key = array[right]
low = left
high = right
while left < right:
while left < right and array[left] < key:
left += 1
else:
array[right] = array[left]
while left < right and array[right] >= key:
right -= 1
else:
array[left] = array[right]
array[right] = key
quick_sort(array,low,left-1)
quick_sort(array,right+1,high)
array = [49,38,67,97,76,13,27,66]
quick_sort(array,0,len(array)-1)
版本2:
def quick_sort(array, left, right):
"""快速排序"""
if left < right:
key = array[right]
i = left -1
for j in range(left,right):
if array[j] <= key:
i +=1
array[i], array[j] = array[j], array[i]
array[i+1], array[right] = array[right], array[i+1]
quick_sort(array,left,i)
quick_sort(array,i+2,right)
array = [49,38,67,97,76,13,27,66]
quick_sort(array,0,len(array)-1)
总结:
这两个版本核心的地方都是把比基准小的元素放基准前边,而比基准大的元素放基准后边,并无差别,但是版本2的代码更简洁