python 基础知识点(蓝桥杯python科目个人复习计划39)

今日复习内容:排序

昨天晚上快睡的时候,脑子里就突然想到了排序,所以就打算再复习一遍相关知识点。

我先说一下冒泡排序,冒泡排序其实很好理解,比如有n个人排队(从矮到高),先从这n个人中找出最高的那个,放到最后,然后忽略最高的那个,从剩余的n-1个人中再找出最高的那个,一直重复这个操作,就完成了排队,在这个过程中,最矮的那个同学是最后才排的,而且比他高的n-1个人都排好了,他就直接去剩下的那个位置就行,因此,虽然有n个人,只需要排n-1次就行,这就是冒泡排序的基本原理,它的时间复杂度是O(n^2),所以应该使用双重循环。

现在,我来把它编成代码:

n = int(input('请输入一个整数:'))
a = list(map(int,input().split()))
for i in range(1,n):for j in range(n - i):if a[j] > a[j + 1]:a[j],a[j + 1] = a[j + 1],a[j]
print(' '.join(map(str,a)))

运行结果:

 

简单来说,就是一直找最大的那个数,一直往后排,最小的数字放第一位就行。

然后是选择排序,我举个例子,有n个同学排队(从矮到高),从这n个同学中找出最矮的那个,放在第一位,然后忽略它,再从剩余的n - 1个同学中找出最矮的那个,一直重复该操作,等前面n - 1个同学都排好了,最高的那个都不用重复上述操作了,直接去最后就行,所以,虽然有n个同学排队,但是只需要n - 1次排列,它的时间复杂度仍然是O(n^2)。

现在,我来把它编成代码:

n = int(input('请输入一个整数:'))
a = list(map(int,input().split()))
for i in range(0,n - 1):min_value = a[i]min_idx = ifor j in range(i,n):if a[j] < min_value:min_value = a[j]min_idx = ja[i],a[min_idx] = a[min_idx],a[i]
print(' '.join(map(str,a)))

运行结果:

 

这个做法呢,就是一直找小的数,最大的那个直接放最后就行。

接下来是插入排序,我举个例子,有n个 同学排队(从矮到高),首先,先站成一排,不管顺序,先把n个位置占满,此时,将第一个同学看作已经排列正确的,然后,从最后一个开始,两个两个的比较,比你前面高的,你就在后面站着,如果你比前面那个矮,就往前排,一个一个的插进去,但是呢,n - 1个人都排好了,剩着的那个直接去空位上就行,所以,虽然有n个人参与排队,但是,n-1次循环就搞定了,时间复杂度仍然是O(n^2)这就是插入排序的基本原理。

现在,我来把它编成代码。

n = int(input('请输入一个正整数:'))
a = list(map(int,input().split()))
for i in range(1,n):value = a[i]insert_idx = 0for j in range(i - 1,-1,-1):if a[j] > value:a[j + 1] = a[j]else:insert_idx = j + 1breaka[insert_idx] = value
print(' '.join(map(str,a)))

运行结果:

 

下一个,是快速排序,我举个例子。有n个同学排队(从矮到高),随便找出一个同学A,让他站着别动,然后,把剩下的这n-1个同学分成两部分,一部分比他矮,另一部分比他高,然后矮的那些同学就排在同学A前面,高的那部分同学就排在A同学后面,最后,分别对这两部分的同学按顺序排列就行了,这个方法的时间复杂度和空间复杂度就比较复杂了,是O(nlogn)(我记得我在某一篇里写过),这就是快速排序的基本原理。

现在,我来把它编成代码:

def partition(a,left,right):idx = left + 1for i in range(left + 1,right + 1):if a[i] <= a[left]:a[i],a[idx] = a[idx],a[i]idx += 1a[left],a[idx - 1] = a[idx - 1],a[left]return idx - 1def quicksort(a,left,right):if left < right:mid = partition(a,left,right)quicksort(a,left,mid - 1)quicksort(a,mid + 1,right)n = int(input('请输入一个整数:'))
a = list(map(int,input().split()))
quicksort(a,0,n - 1)
print(' '.join(map(str,a)))

运行结果:

 

接下来是归并排序,我举个例子:

有两个列表a和b,我要把它们合并起来,假设a是空的,则只需要排列一下b内的元素(从小到大),b为空时操作一样,有点意思的就是两个列表都不为空,那就一个元素一个元素的比就可以了。

现在,我来把它编成代码:

n = int(input('请输入一个整数:'))
a = list(map(int,input().split()))def Merge(a,b):result = []while len(a) != 0 and len(b) != 0:if a[0] <= b[0]:result.append(a.pop(0))else:result.append(b.pop(0))result.extend(a)result.extend(b)return resultdef Mergesort(a):if len(a) < 2:return amid = len(a) // 2left = Mergesort(a[:mid])right = Mergesort(a[mid:])return Merge(left,right)print(' '.join(map(str,Mergesort(a))))

运行结果:

 

OK,终于写完了,我待会儿会继续复习的,那这篇就这样吧。

代码方面有问题的话,可以给我发私信的,一起交流讨论,备战蓝桥杯!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/467729.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cool Nodejs后端框架 如何快速入门 写一个接口

1.cool 框架 js前端开发者 想自己写后端接口 快速入门的就是node.js 了 可以用这个框架自己做一些东西 或者实现前后端的开发 2.目录结构 这个基本上 就是cool 框架的项目结构 主要是 这个src 中的modules 文件夹 这个文件夹 主要是一些接口模块 比如 business 中 相当于…

多尺度神经网络新一代创新!精度与速度完美平衡,实现多领域应用落地

多尺度神经网络的设计通常基于对频率原则的理解&#xff0c;目的是为了解决高频成分学习慢的问题。这些网络通过特殊设计&#xff0c;比如给高频成分加更多的权重或者将高频成分平移到低频&#xff0c;来提高学习效率。 为了满足在不同层次上理解和处理数据的需求&#xff0c;…

react【六】 React-Router

文章目录 1、Router1.1 路由1.2 认识React-Router1.3 Link和NavLink1.4 Navigate1.5 Not Found页面配置1.6 路由的嵌套1.7 手动路由的跳转1.7.1 在函数式组件中使用hook1.7.2 在类组件中封装高阶组件 1.8 动态路由传递参数1.9 路由的配置文件以及懒加载 1、Router 1.1 路由 1.…

WSL外部SSH连接有效方法

前言 wsl作为windows下使用linux平台有效的手段之一&#xff0c;本文可以让win作为工作站&#xff0c;外部系统用来连接win下的wsl系统。 自动启动服务脚本 https://zhuanlan.zhihu.com/p/47733615 开机自启端口转发 wslname "Ubuntu-20.04" 要转发端口的Linux…

html的格式化标签和图片(img)标签

格式化标签 加粗: strong标签和b标签倾斜: em标签和i标签删除线: del标签和s标签下划线: ins标签和u标签 <strong>stong 加粗</strong><b>b 加粗</b><em>倾斜</em><i>倾斜</i><del>删除线</del><s>删除线…

实景剧本杀小程序:创新体验,沉浸式推理乐趣

随着科技的飞速发展&#xff0c;人们对于娱乐方式的追求也在不断升级。传统的桌面剧本杀游戏已经不能满足玩家的需求&#xff0c;他们渴望更加真实、刺激的游戏体验。正是这种需求推动下&#xff0c;实景剧本杀小程序应运而生&#xff0c;为玩家带来前所未有的推理乐趣。 实景…

Linux---守护进程

运行的这个进程&#xff0c;它的pid和gpid(进程组ID)一样&#xff0c;它是自成一组的。 这就是一个进程组。 进程组和任务有什么关系&#xff1f; 将任务指派给进程组。任务都是由进程组去完成的。 可以发现&#xff0c;这三个进程的会话id1351都是一样的&#xff0c;多个任…

【教程】MySQL数据库学习笔记(二)——数据类型(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 文章目录 【MySQL数据库学习】系列文章一、整…

Gopro Fusion Studio在win10上无法导入Fusion的视频文件

在win10家庭版已经尝试1.0&#xff0c;1.3&#xff0c;1.4三个版本&#xff0c;都是无法渲染&#xff0c;我安装了Gopro VR Player的。 在虚拟机中重新装了win10 企业版&#xff0c;安装了1.4的Gopro Fusion Studio也不行&#xff0c;都是报这个错&#xff0c;目前没啥解决办法…

MyBatis中的XML实现和动态SQL实现

文章目录 一、XML实现1.1增1.2删1.3查1.4改 二、XML方式实现动态SQL2.1if标签2.2trim标签2.3where标签2.4set标签2.5foreach标签2.6include标签和sql标签 一、XML实现 先在新建的XML文件中写入如下内容&#xff1a; <?xml version"1.0" encoding"UTF-8&qu…

腾讯云4核8G服务器多少钱?646元一年零3个月

腾讯云服务器4核8G配置优惠价格表&#xff0c;轻量应用服务器和CVM云服务器均有活动&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;腾讯云百科txybk.com分…

力扣精选算法100道——矩阵区域和 (前缀和专题)

目录 &#x1f388;了解题意 &#x1f388;算法原理 &#x1f388;实现代码 &#x1f388;了解题意 给定一个大小为 m x n 的矩阵 mat 和一个整数 k&#xff0c;你需要计算一个新的矩阵 answer&#xff0c;其中每个 answer[i][j] 表示矩阵 mat 中以坐标 (i, j) 为中心、边…