第2章《算法基础》:插入排序,归并排序,python实现

本章主要介绍了两个基础排序算法,插入排序和归并排序算法,接下来用python语言对这两个算法进行实现。

插入排序

算法思路:类似打牌场景,从桌子上每次抽取一张牌,然后从右往左扫描我们手中的牌,一一进行对比(手中的牌已排好序),然后插入到适中位置
在这里插入图片描述
算法时间复杂度 O ( n 2 ) O(n^{2}) O(n2)
python实现:

def insert_sort(A):
	for i in range(1,len(A)):
		key = A[i]
		j = i - 1
		while j>=0 and A[j]>key:
			A[j+1] = A[j]
			j-=1
		A[j+1] = key
	return A
if __name__=='__main__':
	A = [1,2,48,90,3]
	print(A)
	A = insert_sort(A)
	print(A)

归并排序

算法思路:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。
每层递归都有三个步骤:

  • 分解原问题为若干子问题
  • 解决这些子问题,若子问题的规模足够小,则直接求解
  • 合并子问题的解成原问题的解
    归并排序算法的关键操作是“合并”步骤中两个已排序序列的合并
    在这里插入图片描述

算法复杂度 O ( n l g n ) O(nlgn) O(nlgn)
在这里插入图片描述
python实现

import sys
maxs = sys.maxsize
#合并操作
def merge(L,R):
	B = []
	# 两个哨兵
	L.append(maxs)
	R.append(maxs)
	m,n = 0,0
	#循环L和R长度次数(减去两个哨兵),放两个哨兵,则可以一次循环把所有值都参与对比
	for i in range(len(L)+len(R)-2):
		if L[m]<=R[n]:
			B.append(L[m])
			m+=1
		else:
			B.append(R[n])
			n+=1
	return B
def merge_sort(A):
	if len(A)<=1:
		return A
	middle = int(len(A)/2)
	left = merge_sort(A[:middle])
	right = merge_sort(A[middle:])
	return merge(left,right)
	
if __name__=='__main__':
	A = [1,2,34,56,23,2,47]
	print(A)
	A = merge_sort(A)
	print(A)
	 
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值