快排原理
步骤:
1.从数列中挑出一个元素,称为 “基准”(pivot),
2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
快排代码(Python)
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
def quicksort(list):
Qsort(list,0,len(list)-1)
return list
#将找到中间枢轴的位置,对枢轴左边和右边分别进行递归,在递归的过程中,对左,右分别进行了排序
def Qsort(list,low,high):
if low<high:
pivot=Partition(list,low,high)
Qsort(list,low,pivot-1)
Qsort(list,pivot+1,high)
#作用是:找到list中[low,high],交换子表的记录,返回枢轴的定位
def Partition(list, low, high):
key = list[low]
while low < high:
#先移动high,再移动low。而不是先移动low,再移动high.
#因为key是取的list[low],是从low这端开始取的,因此比较大小的时候从high端开始比较,及移动。
#如果从low端开始比较和移动的话,那么list[low]一定是被略过去了,并没有移动。
while (low < high) & (list[high] >= key):
high=high-1
list[low],list[high]=list[high],list[low]
while (low < high) & (list[low] <= key):
low = low+1
# a = list[low]
# k1 = key
# print(a)
# print(k1)
list[low],list[high]=list[high],list[low]
return low
List=[3,1,2,4,79,54,76,2]
newlist=quicksort(List)
print(newlist)