一、冒泡排序

1.1、冒泡的原理

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2.1、冒泡排序的代码实现

defbubble_sort(seq):

count=len(seq)for i inrange(0,count):for j in range(i+1,count):if seq[i]>seq[j]:

seq[i],seq[j]=seq[j],seq[i]returnseq

seq=[4,5,2,1,6,3]print(bubble_sort(seq))

3.1、冒泡排序的时间复杂度

1、最好情况:若文件的初始状态是正序的,一趟扫描即可完成排序,这是冒泡排序的最优情况时间复杂度o(n)

2、最坏情况:若初始文件是反序的的,则冒泡排序需要两层循环,这是最坏情况时间复杂度o(n^2)

3、平均时间复杂度o(n^2)

二、快排

2.1 快排原理

快排是冒泡排序的改进,抽取第一个值作为比较值,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比比较值小,另一部分比比较值大,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,最后将分开的来两部分加比较值合并到一起,完成排序。

2.2 快排的代码实现

defquck_sort(seq):if seq==[]:return[]else:

pivot=seq[0]

low_list=quck_sort([x for x in seq if x

upper_list=quck_sort([x for x in seq if x>pivot])#比比较值大的部分递归排序

return low_list+[pivot]+upper_list #将三者进行合并,注意将比较值转换成列表

print(quck_sort(seq))

2.3 快排的时间复杂度

1、最优情况:比较值刚好将列表分成等分了两部分,时间复杂度o(nlogn)

2、最坏情况:每次递归比较值都是最小值,导致列表分开不均衡,时间复杂度o(n^2)

3、平局时间复杂度o(nlogn)

三、堆排序

堆排序原则,1.先对数据进行建堆操作(可以建大根堆或小根堆) 大跟堆:任一节点都比其孩子节点大

2.再对建好的堆进行出树据操作,交换堆顶元素和末尾元素并重建堆两部分组

def shit(li,low,high): #建堆

#li表示树,low表示树跟,high 表示最后一个节点的位置

temp=li[low]

i=low #i指向调整为起始为0

j=2*i+1 #左孩子的位置

while j<=high:if j+1<=high and li[j]

j+=1

if li[j]>temp: #比较跟节点值和新指向j的大小

li[i]=li[j] #如果j的值大于temp,跟节点和孩子节点位置互换,i位置调整到j的位置

i=j

j=2*i+1 #得出调整后新的j的位置

else: #循环推出的条件,temp值比两个孩子均大,不做调整

breakli[i]=tempdefheap_sort(li):

n=len(li)#1.构造堆

for low in range(n//2-1,-1,-1):

shit(li,low,n-1)#2.挨个出数

for high in range(n-1,-1,-1):

li[0],li[high]=li[high],li[0] #树顶的数据跟尾部数据交换,

shit(li,0,high-1) #每次循环high的位置多一个大的数字,位置调整一次,剩余的部分再建堆

arr1=[1,4,3,6,5,8,2,7]

heap_sort(arr1)print(arr1)

其中构建初始堆经推导复杂度为O(n),在交换并重建堆的过程中,需交换n-1次,而重建堆的过程中,根据完全二叉树的性质,[log2(n-1),log2(n-2)...1]逐步递减,近似为nlogn。所以堆排序时间复杂度一般认为就是O(nlogn)级。

python中heapq模块是堆排序模块,他建立的堆属于小根堆,用法如下:

importheapq

li=[1,3,2,6,4,7,5,9,8]

heapq.heapify(li)#建堆(小根堆)

heapq.heappush(li,0)#向队中加入一个数字,会自动做重新建堆操作

heapq.heappop()#从堆中取数据,由于其建的是小根堆,最后出的是0

python解题冒泡排序_python 冒泡排序,快排相关推荐

  1. 使用python完成冒泡排序_python 冒泡排序优化,用递归实现冒泡排序

    下面代码是冒泡排序逐步优化,写代码用递归也可以实现.什么冒泡排序就不写了,百度解释很详细.对理论不是很感兴趣. #!/usr/bin/env python3 # -*- coding: utf-8 - ...

  2. python解题教学_Python解题记录第10题

    [本文结构]题目信息:来源.地址.序号.描述 题目答案:简要分析,程序代码(测试运行通过,含注释),运行结果 霍霍磨刀:解答这道题目之前应掌握的知识基础 解析过程:题目类型,分析以及实践过程 斩获成果 ...

  3. python输入十个数用冒泡排序_python 冒泡排序法

    我们先看一个代码: 这段代码的意思是:利用随机整数函数randint()生成1到35的随机数.通过while循环10次,生 成10个这样的随机数.将生成的10个随机数组成一个列表,并用冒泡排序法来对该 ...

  4. python列表冒泡排序_python – 冒泡排序已排序列表

    正如Jorge在回答中所示,但是没有解释(如关闭喷射)在泡泡中放置一个默认为True或False的布尔变量,无论你选择什么,如果你进行交换并将结果返回到最后,则将其值更改为oposite,如果从bub ...

  5. python数据处理框架_python 最快 web 框架 Sanci 快速入门

    简介 Sanic 是一个和类Flask 的基于Python3.5+的web框架,它编写的代码速度特别快. 除了像Flask 以外,Sanic 还支持以异步请求的方式处理请求.这意味着你可以使用新的 a ...

  6. python解题教学_PYTHON教学设计:计算机解决问题的过程教案-精.doc

    计算机解决问题的过程 教案 一.教学目标: 1.凸显计算机编程的优势,激发学生探索python语言的兴趣 2.引导学生分析与描述算法的方法,培养其计算思维 3.通过学生体验游戏以及python编程调试 ...

  7. ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】

    瑶瑶的第K大 Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format:%lld & %llu Submit Status ...

  8. ssl1125-集合【哈希表二分查找+快排】

    前言 今天学哈希表,然后就第一节晚修赶快写完作业就上了做题了,然后就做完了这道题get√. 正题 题目 给出两个集合: A是B的一个真子集,输出"A is a proper subset o ...

  9. 1、python冒泡排序和快排

    冒泡排序的原理: 比较相邻的两个元素,如果顺序有误则把他们交换位置. 直到最后一个是最大的.就像气泡一样,小的向上浮. list1 = [20,15,88,97,76,13,27,49] def bu ...

最新文章

  1. 往事并不如烟@武汉 --- 和同事们一起'诈金花’
  2. Python 技术篇-socket套接字实现两个窗口间消息传递实例演示,TCP实现
  3. php js获取表单内容,jquery form表单获取内容以及绑定数据_javascript技巧
  4. BZOJ 4407 于神之怒加强版
  5. 琥珀项目:Java的未来揭晓
  6. 计算机网络与网站设计知识点,计算机网络技术知识点总结-20210525075410.docx-原创力文档...
  7. ATL 线程池的使用
  8. 【小工匠聊Modbus】07-错误响应
  9. Spring Boot引起的“堆外内存泄漏”排查及经验总结 1
  10. 支付宝资金预授权怎么开通详解,芝麻信用免押接口开通,免押领取/免押金租赁设备!
  11. linux crontab零点,Linux中20个crontab例子
  12. 域控服务器共享盘搭建,搭建域控服务器
  13. H.266/VVC技术学习:帧内预测之MIP技术
  14. html的ul和li元素
  15. 举例:在从库上备份,到主库上恢复
  16. 毕设论文中第一章的图注出现“图一.1”,转化为“图1.1”的方法
  17. 汉字如何改革减少同音字?
  18. Java项目:公寓房屋出租系统(java+SSM+JSP+EasyUI+Echarts+Mysql)
  19. 编程修养-C语言篇(下)(转)
  20. 冥冥之中——姥姥的喜丧

热门文章

  1. gitlab客户端安装及使用
  2. html5单片机,3.4 单片机中三极管的应用
  3. 软硬件视频会议互通方案
  4. java公告_[公告]java起步篇
  5. python摄像头推流_海康视频实时推流学习笔记
  6. python实现最小堆
  7. 深信服上网行为AC高级考试A卷_76
  8. 零基础小白如何入门网络安全?
  9. 【linux】循序渐进学运维-基础篇-配置静态IP详解
  10. 如何轻松应对光纤传输容量不足?DWDM光模块实现链路扩容