算法学习1:十大排序算法(Python实现)
算法学习1:十大排序算法(Python实现)
注意:写range(a,b)要注意,看左不看右,b-a的值为总个数,从a开始数。如range(0,3),实际的值为0,1,2,总个数为3个。
PS:生成随机数组测试的代码如下
Testlist =random.sample(range(0, 101), 10)
print('原列表:',Testlist)
print('升序排序后:',Quick_sort(Testlist))
1.交换排序
1.1冒泡排序
核心思想:双重循环,依次比较相邻的两个元素大小,每次外循环会产生一个最大值在列表末尾。下一次循环这个值不再参加比较,如此下去,直到参加比较的只剩一个值(外循环n-1次)。
def Bubble_Sort(lst):
n =len(lst)
for i in range(0,n-1):#外循环,共循环n-1次
for j in range(0,n-1-i):#内循环。每次内循环量根据i减少
if lst[j]>lst[j+1]:
lst[j],lst[j+1]=lst[j+1],lst[j]
return lst
1.2快速排序
核心思想:取列表开头或结尾一个元素作为中间对比值,遍历余下元素与之比较,划分为一个大数区间和一个小数区间。再对这两个区间再次作此操作,即递归下去,直到所有区间列表都只含一个元素。将所有区间按小——中间值——大拼接起来(这一步应当放在递归过程中,每一次递归的中间值都是不同的),形成升序列表。
def Quick_sort(lst):
# 递归退出的条件
length = len(lst)
if length <= 1:
return lst
else:
mid = lst.pop()#可以选第一个元素作为基准值,也可以选最后一个。这是终止递归的重要一步,它减少了列表内元素个数,到最后参加递归的列表只会剩一个元素。
big, small = [], []
for element in lst:
if element > mid:
big.append(element)
else:
small.append(element)
return Quick_sort(small) + [mid] + Quick_sort(big)#将划分好的列表再次递归,直到最后划分出的所有列表都只剩一个元素,顺序拼接起来
2.插入排序
2.1 简单插入排序
核心思想:默认从第二个值开始遍历,作为保存值,循环比较保存值左侧的值是否小于它,大于则将该值右移一位,直到保存值左侧的值没有值大于它,此时将保存值插入该位置。如此遍历,完成升序排序。
def Insert_sort(lst):
n =len(lst)
for i in range(1,n):
j =i#采用j的目的是为了后面可以在保持i不变的情况下,循环比较保存值左侧的值
save =lst[i]
while lst[j-1]>save and j>0:
#将所有比保存值大的元素循环右移
lst[j] =lst[j-1]
j =j-1
lst[j] =save#此时循环结束,j-1代表的元素>=save值,j元素值实际已移到了j+1处,故此时将j处元素替换为save值
return lst
2.2 希尔排序
3.选择排序
3.1 简单选择排序
3.2 堆排序
前置知识:树结构
满二叉树:每一个分支都是满的
完全二叉树:最后一行可以不满,但是必须在最后一行的左端
树结构在程序中采用顺序存储方式,如:
对于完全二叉树,假设父节点下标为i,那么其左侧子节点下标为2i+1,右侧子节点下标为2i+2。
大根堆:一颗完全二叉树,且父节点永远大于子节点
小根堆:一颗完全二叉树,且父节点永远小于子节点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具