python插入排序、选择排序、快速排序

1. 选择排序

思路:假定整个序列由2部分组成,一部分有序,一部分无序;我们从无序的序列中找到其中的最小值,放到有序的末端。
初始时,默认有序的序列为[],整个序列都是无序的,找到其中的最小值,用 min 记录,最后用min对应的值和l[i=0]互换。以此类推,同时默认每次的min的初始值都为无序的首个元素的下标
def select(list):
	n = len(list)
# 取出一个数值,假定其为最小数,与在它后面的n-1个数进行对比,取出最小数
	for j in range(n-1):
		min_data = j
# 每执行一次for循环,都会在min_data ~ n之间取出最小数,并将其放在队列首端
# 因此j需要取值n-1次(因为最后一个数在上一次循环中已被判断较前一个数大,由此不需要再进行比较)
		for i in range(min_data+1, n):
			if list[i] < list[min_data]:
				min_data = i
		# 将最小值放在前端
		if min_data != j:
			list[min_data], list[j] = list[j], list[min_data]

2 插入排序

def insert(list):
	n = len(list)
	# 从列表左边开始取值
	for i in range(n):
	# 可用 for i in range(n, 0, -1):配合下方内部条件代替
		# 将取过的值按指定顺序排列(注意取值时要与外部for循环的取值方向相反
		#(确保内部for循环取值范围在外部循环的范围内)
		# for j in range(i, n):
		for j in range(i, 0, -1):
			if list[j-1] < list[j]:
				list[j-1], list[j] = list[j], list[j-1]
			else:
				continue

3 快速排序

import random


def quicksort(L, low, high):
	# 传入2个下标,得到排序范围
	i = low
	j = high
	# 递归函数,当排序对象完成排序时,i = j(递归到边缘时传入参数会出现大于的情况)
	if i >= j:
		print('***')
		return L
	key = L[i]
	while i < j:
		while i < j and L[j] >= key:
			j = j-1
		L[i] = L[j]
		while i < j and L[i] <= key:
			i = i+1
		L[j] = L[i]
	L[i] = key
	quicksort(L, low, i-1)
	quicksort(L, j+1, high)
	# 每次返回已经排好的列表
	print('1')
	return L


if __name__ == '__main__':
	list1 = list(range(10))
	random.shuffle(list1)
	print(list1)
	print(quicksort(list1, 0, 9))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值