排序算法:【冒泡排序】、逻辑运算符not用法、解释if not tag:

注意:

1、排序:将一组无序序列,调整为有序的序列。所谓有序,就是说,要么升序要么降序。

2、列表排序:将无序列表变成有序列表。

3、列表这个类里,内置排序方法:sort( ),只可以对列表进行排序;而python内置函数sorted( )可以对序列进行排序,即:可以对列表、字符串、集合、字典、元组进行排序。

4、常见的排序算法:

推荐快速排序、堆排序、归并排序

不推荐:冒泡排序、选择排序、插入排序

其它排序:希尔排序、计数排序、基数排序。

一、冒泡排序 ——时间复杂度:O(n^{2})

        例如,想要得到一个升序的列表,(默认升序)则依次比较相邻的两个数,如果前面的数比后面的数,则交换这两个数,一趟下来,最大的数跑到了最后,即:一趟下来,无序区减少一个数,有序区增加一个数。

相反,如果想得到降序,则依次比较相邻的两个数,如果前面的数比后面的数则交换这两个数。对于代码,只需要把 

li[j] > li[j + 1]  改为 

li[j] li[j + 1]即可。

它是原地排序,不需要新建列表,而是在原来列表上通过交换来进行排序。

代码:

以升序为例,分别用三种方式表示列表:推荐第三种!!!

1、列表写死:

def bubble_sort(li):for i in range(len(li) - 1):  # 总共要排n-1趟for j in range(len(li)-1-i):  # 每趟里,依次比较相邻的两个数if li[j] > li[j + 1]:li[j], li[j + 1] = li[j + 1], li[j]l1 = [1, 4, 3, 2]
bubble_sort(l1)
print(l1)# 结果:
[1, 2, 3, 4]

2、列表不写死,用生成随机整数方式生成列表

import randomdef bubble_sort(li):for i in range(len(li) - 1):  # 总共要排n-1趟for j in range(len(li) - 1 - i):  # 每趟里,依次比较相邻的两个数if li[j] > li[j + 1]:li[j], li[j + 1] = li[j + 1], li[j]l1 = [random.randint(1, 10) for i in range(4)]  # 从1~10里,随机生成4个数
print("待排序列为:", l1)
bubble_sort(l1)
print("冒泡排序后:", l1)# 结果:
待排序列为: [8, 1, 3, 6]
冒泡排序后: [1, 3, 6, 8]

3、列表由用户输入

(1)排成升序:

def bubble_sort(li):for i in range(len(li) - 1):  # 总共要循环n-1趟for j in range(len(li) - 1 - i):  # 每趟里,依次比较相邻的两个数if li[j] > li[j + 1]:  #  !!!排成升序li[j], li[j + 1] = li[j + 1], li[j]l1 = list(map(int, (input().split())))  # 用户输入列表
bubble_sort(l1)
print(l1)  # 输出最后的排序结果输入:7 4 2 1# 结果:
[1, 2, 4, 7]
!!优化1:想要看到每一趟排序完的结果:
def bubble_sort(li):for i in range(len(li) - 1):  # 总共要循环n-1趟for j in range(len(li) - 1 - i):  # 每趟里,依次比较相邻的两个数if li[j] > li[j + 1]:li[j], li[j + 1] = li[j + 1], li[j]print("第%s趟排序后的结果:%s" % (i, li))  # !!!l1 = list(map(int, (input().split())))  # 用户输入列表
bubble_sort(l1)
print("最终排序结果:", l1)  # 输出最后的排序结果# 输入:
7 4 2 1
# 结果:
第0趟排序后的结果:[4, 2, 1, 7]
第1趟排序后的结果:[2, 1, 4, 7]
第2趟排序后的结果:[1, 2, 4, 7]
最终排序结果: [1, 2, 4, 7]

可知,三趟下来,列表就拍好序了,所以,n个数,一共需要排n-1趟。

效果图:

(2)排成降序:只需要把上面 > 改成 <  

def bubble_sort(li):for i in range(len(li) - 1):  # 总共要循环n-1趟for j in range(len(li) - 1 - i):  # 每趟里,依次比较相邻的两个数if li[j] < li[j + 1]:  # !!!排成降序li[j], li[j + 1] = li[j + 1], li[j]print("第%s趟排序后的结果:%s" % (i, li))  # !!!l1 = list(map(int, (input().split())))  # 用户输入列表
bubble_sort(l1)
print("最终排序结果:", l1)  # 输出最后的排序结果# 输入:1 3 5 7# 结果:
第0趟排序后的结果:[3, 5, 7, 1]
第1趟排序后的结果:[5, 7, 3, 1]
第2趟排序后的结果:[7, 5, 3, 1]
最终排序结果: [7, 5, 3, 1]
!!优化2:上面代码有一个弊端,例如:现对[5, 6, 7, 1,2, 3]进行排序
def bubble_sort(li):for i in range(len(li) - 1):  # 总共要循环n-1趟for j in range(len(li) - 1 - i):  # 每趟里,依次比较相邻的两个数if li[j] > li[j + 1]:li[j], li[j + 1] = li[j + 1], li[j]print("第%s趟排序后的结果:%s" % (i, li))  # !!!l1 = list(map(int, (input().split())))  # 用户输入列表
bubble_sort(l1)
print("最终排序结果:", l1)  # 输出最后的排序结果# 输入:5 6 7 1 2 3
# 结果:
第0趟排序后的结果:[5, 6, 1, 2, 3, 7]
第1趟排序后的结果:[5, 1, 2, 3, 6, 7]
第2趟排序后的结果:[1, 2, 3, 5, 6, 7]
第3趟排序后的结果:[1, 2, 3, 5, 6, 7]
第4趟排序后的结果:[1, 2, 3, 5, 6, 7]
最终排序结果: [1, 2, 3, 5, 6, 7]

 可以看到:

第0趟排序后的结果:[5, 6, 1, 2, 3, 7]
第1趟排序后的结果:[5, 1, 2, 3, 6, 7]
第2趟排序后的结果:[1, 2, 3, 5, 6, 7]
第3趟排序后的结果:[1, 2, 3, 5, 6, 7]
4趟排序后的结果:[1, 2, 3, 5, 6, 7]
最终排序结果: [1, 2, 3, 5, 6, 7]

        其实,第三趟排序完,列表已经排好了,但是这里又多排了第4趟,这就是它的弊端,所以代码可以进行优化,一趟下来,如果没有元素发生交换,则说明,列表已排好序,直接输出即可

具体做法:加个标志位。

def bubble_sort(li):for i in range(len(li) - 1):  # 总共要循环n-1趟tag = False  # !!!for j in range(len(li) - 1 - i):  # 每趟里,依次比较相邻的两个数if li[j] > li[j + 1]:li[j], li[j + 1] = li[j + 1], li[j]tag = True  # !!!print("第%s趟排序后的结果:%s" % (i, li))  # !!!if not tag:  # !!!returnl1 = list(map(int, (input().split())))  # 用户输入列表
bubble_sort(l1)
print("最终排序结果:", l1)  # 输出最后的排序结果# 输入:5 6 7 1 2 3
# 结果:
第0趟排序后的结果:[5, 6, 1, 2, 3, 7]
第1趟排序后的结果:[5, 1, 2, 3, 6, 7]
第2趟排序后的结果:[1, 2, 3, 5, 6, 7]
第3趟排序后的结果:[1, 2, 3, 5, 6, 7]
最终排序结果: [1, 2, 3, 5, 6, 7]

可见,此时第4趟没有了。

注解:

def bubble_sort(li):for i in range(len(li) - 1):  # 总共要循环n-1趟tag = Falsefor j in range(len(li) - 1 - i):  # 每趟里,依次比较相邻的两个数if li[j] > li[j + 1]:li[j], li[j + 1] = li[j + 1], li[j]tag = Trueif not tag:returnl1 = list(map(int, (input().split())))  # 用户输入列表
bubble_sort(l1)
print("最终排序结果:", l1)  # 输出最后的排序结果# 输入:5 6 7 1 2 3
# 结果:
最终排序结果: [1, 2, 3, 5, 6, 7]

逻辑运算符:not的用法:not就是取反

例1:

tag = True
print(not tag)  # not就是取反# 结果:
False

例2:

tag = Trueif not tag:   print(tag)
# 结果: 控制台什么都没有进程已结束,退出代码 0
解释:if not tag:

if 是条件判断语句,如果要执行 if 下面的代码,说明 if 后面的东西是 True。

而这里 tag = True ,  not tag就是False

整条判断语句就是  if False,说明 if 后面的东西是False,所以if 下面的代码就不会执行,这里也就不会输出tag的值了。

改下:改成 tag = False

tag = False
print(not tag)
if not tag:   # not tag=True,这句话就是if True: 式子成立print(tag)# 结果:
True
False

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

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

相关文章

大数据讲课笔记1.4 进程管理

文章目录 零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;进程概述1、基本概念2、三维度看待进程3、引入多道编程模型&#xff08;1&#xff09;CPU利用率与进程数关系&#xff08;2&#xff09;从三个视角看多进程 4、进程的产生和消亡&#xff08;1&#xf…

平台工程与 DevOps 和 SRE 有何不同?

在现代软件开发和运营的动态领域中 &#xff0c;平台工程、DevOps 和站点可靠性工程 (SRE) 等术语 经常使用&#xff0c;有时可以互换使用&#xff0c;这常常会导致进入或浏览这些领域的专业人员感到困惑。了解这些概念之间的细微差别对于努力构建强大且可扩展的系统的组织至关…

爱智EdgerOS之深入解析安全可靠的开放协议SDDC

一、协议简介 在 EdgerOS 的智慧生态场景中&#xff0c;许多智能设备或传感器的生命周期都与 SDDC 协议息息相关&#xff0c;这些设备可能是使用 libsddc 智能配网技术开发的&#xff0c;也有可能是因为主要功能上是使用其他技术如 MQTT、LoRa 等但是设备的上下线依然是使用上…

构建外卖小程序:技术代码实践

在这个数字化的时代&#xff0c;外卖小程序已经成为餐饮业的一项重要工具。在本文中&#xff0c;我们将通过一些简单而实用的技术代码&#xff0c;向您展示如何构建一个基本的外卖小程序。我们将使用微信小程序平台作为例子&#xff0c;但这些原理同样适用于其他小程序平台。 …

连连看游戏

连通块记忆性递归的综合运用 这里x&#xff0c;y的设置反我平常的习惯&#xff0c;搞得我有点晕 实际上可以一输入就交换x&#xff0c;y的数据的 如果设置y1为全局变量的话会warning&#xff1a; warning: built-in function y1 declared as non-function 所以我改成p和q了…

阿里云人工智能平台PAI多篇论文入选EMNLP 2023

近期&#xff0c;阿里云人工智能平台PAI主导的多篇论文在EMNLP2023上入选。EMNLP是人工智能自然语言处理领域的顶级国际会议&#xff0c;聚焦于自然语言处理技术在各个应用场景的学术研究&#xff0c;尤其重视自然语言处理的实证研究。该会议曾推动了预训练语言模型、文本挖掘、…

Bytebase 2.12.0 - 改进自动补全和布局导航

&#x1f680; 新功能 支持 MySQL 高级自动补全。支持从 UI 上导入分类分级配置。 &#x1f514; 重大变更 作废已有企业版试用证书。之后可以通过提交申请获取新的试用证书。 &#x1f384; 改进 改进整体布局和导航。 支持在 SQL 编辑器里显示以及查询 PostgreSQL 数据…

HCIA-H12-811题目解析(9)

1、【单选题】下面选项中&#xff0c;能使一台IP地址为10.0.0.1的主机访问Interne的必要技术是&#xff1f; 2、【单选题】 FTP协议控制平面使用的端口号为&#xff1f; 3、【单选题】 使用FTP进行文件传输时&#xff0c;会建立多少个TCP连接&#xff1f; 4、【单选题】完成…

【算法Hot100系列】寻找两个正序数组的中位数

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

WordPress主题Lolimeow v8.0.1二次元风格支持erphpdown付费下载

WordPress国人原创动漫主题lolimeow免费下载 lolimeow是一款WordPress国人原创主题&#xff0c;风格属于二次元、动漫、可爱萝莉风&#xff0c;带有后台设置&#xff0c;支持会员中心。该主题为免费主题。 1.侧栏/无侧栏切换&#xff01; 2.会员中心&#xff08;配套Erphpdown…

JVM 详解(JVM组成部分、双亲委派机制、垃圾回收算法、回收器、回收类型、了解调优思路)

目录 JVM 详解&#xff08;JVM组成部分、双亲委派机制、垃圾回收算法、回收器、回收类型、了解调优思路&#xff09;1、概念&#xff1a;什么是 JVM ?JVM 的作用&#xff1f; 2、JVM 的主要组成部分&#xff1f;类加载器&#xff08;Class Loader&#xff09;&#xff1a;简单…

Go实现http同步文件操作 - 增删改查

http同步文件操作 - 增删改查 http同步文件操作 - 增删改查1. 前置要求1.1. 构建结构体 文件名 文件内容1.1.1. 页面结构体1.1.2. 为Page结构体绑定方法&#xff1a;Save1.1.3. 对Page结构体支持页面内容查看方法&#xff0c;同时提供页面文件是否存在的方法 1.2. 简单验证上面…

联想笔记本如何安装Vmware ESXi

环境&#xff1a; Vmware ESXi 8.0 Vmware ESXi 6.7 联想E14笔记本 问题描述&#xff1a; 联想笔记本如何安装Vmware ESXi 解决方案&#xff1a; 1.官网下载镜像文件 https://customerconnect.vmware.com/en/downloads/search?queryesxi%208 下载 2.没有账户注册一个 …

vscode报错:建立连接:XHR failed

文章目录 问题解决方案 问题 Windows端ssh远程连接Linux端&#xff0c;Windows端vscode报错&#xff1a;“…XHR failed.” 解决方案 参考&#xff1a;解决 Windows 端 VS Code “无法与 “…“ 建立连接&#xff1a;XHR failed.” 问题 亲测有效。 总结&#xff1a; linux…

【媒体开发】利用FFMPEG进行推拉流

目录 1. 下载并启动媒体服务 2. 使用 FFMPEG 拉流并推送到指定服务地址 3. 客户端拉流 1. 下载并启动媒体服务 MediaMTX&#xff0c;也即之前的rtsp-simple-server&#xff0c;是一个即用型、零依赖的实时媒体服务器和媒体代理&#xff0c;允许发布、读取、代理和记录视频和…

深度学习第5天:GAN生成对抗网络

☁️主页 Nowl &#x1f525;专栏 《深度学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​​ 文章目录 一、GAN1.基本思想2.用途3.模型架构 二、具体任务与代码1.任务介绍2.导入库函数3.生成器与判别器4.预处理5.模型训练6.图片生成7.不同训练轮次的结果对比 一…

51单片机的外部中断的以及相关寄存器的讲解

中断系统 本文主要涉及8051单片机的中断系统的讲解与使用 其中包括中断相关寄存器的介绍与使用以及外部中断初始化的代码分析。 文章目录 中断系统一、 中断的介绍二、 中断结构及相关寄存器2.1 中断源 2.2 中断请求控制器2.2.1 TCON寄存器2.2.2 SCON寄存器2.2.3 中断允许寄存器…

关于“Python”的核心知识点整理大全21

9.3.2 Python 2.7 中的继承 在Python 2.7中&#xff0c;继承语法稍有不同&#xff0c;ElectricCar类的定义类似于下面这样&#xff1a; class Car(object):def __init__(self, make, model, year):--snip-- class ElectricCar(Car):def __init__(self, make, model, year):supe…

创建个人网站(一)从零开始配置环境,搭建项目

目录 前言配置环境前端后端遇到的问题1.安装了nvm和node&#xff0c;vscode没反应2.安装完脚手架之后vue指令不存在 vscode插件&#xff08;以后遇到好的会添进去&#xff09; 前言 从刚开始学前端的html直到现在前后端都有在开发&#xff0c;我一直都有一个想法&#xff0c;就…

保障事务隔离级别的关键措施

目录 引言 1. 锁机制的应用 2. 多版本并发控制&#xff08;MVCC&#xff09;的实现 3. 事务日志的记录与恢复 4. 数据库引擎的实现策略 结论 引言 事务隔离级别是数据库管理系统&#xff08;DBMS&#xff09;中的一个关键概念&#xff0c;用于控制并发事务之间的可见性。…