简单快速排序算法

it2022-05-09  23

快速排序: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数。

def quicksort(L): qsort(L,0,len(L)-1) def qsort(L,first,last): if first<last: split=partition(L,first,last) qsort(L,first,split-1) qsort(L,split+1,last) def partition(L,first,last): #选取列表中的第一个元素作为划分元素 pivot=L[first] leftmark=first+1 rightmark=last while True: while L[leftmark]<=pivot: #如果列表中存在与划分元素pivot相等的元素,让它位于left部分 #以下检测用于划分元素pivot是列表中的最大元素时,防止leftmark越界 if leftmark==rightmark: break leftmark+=1 while L[rightmark]>pivot: #这里不需要检测,划分元素pivot是列表中的最小元素时,rightMark自动停在first处 rightmark-=1 if leftmark<rightmark: #leftMark处的元素大于pivot,rightMark处的元素小于pivot,交换两者 L[leftmark],L[rightmark]=L[rightmark],L[leftmark] else: break #交换first处的划分元素与rightMark元素 L[first],L[rightmark]=L[rightmark],L[first] #返回划分元素pivot的最终位置 return rightmark num_list=[1,8,6,7,45,9] quicksort(num_list) print(str(num_list))

最新回复(0)