py——经典排序之快速排序实现

(我的第一篇博客,虽然转载的是书上的内容)

快速排序是一种分治排序算法。

(1)首先选取一个划分元素(pivot)

(2)重排列表,将其划分为三个部分,即left(小于划分元素pivot的部分),pivot(划分元素),right(大于划分元素pivot)的部分

     此时,划分元素pivot已经在列表的最终位置上了

(3)分别对left和right两部分进行递归排序

快速排序算法的优点是原位排序(只是用很小的辅助栈)但其缺点在于不稳定。

#_*_coding:UTF-8_*_
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:
               #如果列表中存在与划分元素piovt相等的元素,让它位于left部分
		while L[leftmark]<=pivot:
                #检测用于划分元素piovt是列表中最大的元素时,防止leftmake越界
			if leftmark==pivot:
				break
			leftmark+=1
		while L[rightmark]>pivot:
                        #这里不需要做检测,划分元素piovt是列表中最小元素时,rightmake自动停在first处
			rightmark-=1
		if leftmark<rightmark:
                        #此时,leftmake处的元素大于pivot,rightmake处的元素小于pivot,交换两者
			L[leftmark],L[rightmark]=L[rightmark],L[leftmark]
		else:
			break
	L[first],L[rightmark]=L[rightmark],L[first]
        #返回划分元素piovt最终位置
	return rightmark
num_list=[3,67,1,7,-1,-43,436]
print ("排序前:"+str(num_list))
quicksort(num_list)
print("排序后:"+str(num_list))

最后忠告:缩进中的制表符和空格一定要一致

缩进中的制表符和空格一定要一致

缩进中的制表符和空格一定要一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值