【数据结构与算法】排序算法(python)2

小白学数据,只为记录学习进程,对每个问题有新的理解会及时更正。

一、归并排序
归并排序是一个先分再合的过程,先将序列通过二分法分成一个个子序列,后面再比较相邻的两个序列,把两个序列合并成一个有序序列,重复这个过程,直到合并完毕

def merge_sort(list):
	n = len(list)
	if n <= 1:return list
	mid = n//2
	left = merge_sort(list[:mid])
	right = merge_sort(list[mid:])
	left_point,right_point = 0,0
	res = []
	while left_point < len(left) and right_point < len(right):
		if left[left_point] <= right[right_point]:
			res.append(left[left_point])
			left_point += 1
		else:
			res.append(right[right_point])
			right_point += 1
	res += left[left_point:]
	res += right[right_point:]
	return res

if __name__ == "__mian__":
	list = [2,6,9,4,3,8,4,1,7]
	a = merge_sort(list)
	print(a)

时间复杂度: O(nlogn)

二、希尔排序
在插入排序的基础上,引进gap概念,通过构造子序列,来实现排序功能

list = [2,6,9,4,3,8,4,1,7]
n = len(list)
gap = n//2
while gap > 0:
	for j in range(gap,n):
		i = j
		while i > 0:
			if list[i] < list[i-gap]:
				list[i],list[i-gap] = list[i-gap],list[i]
				i -= gap
			else:break
	gap //= 2

print(list)

时间复杂度: O(n^(1.3—2))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值