排序算法:【冒泡排序】、逻辑运算符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 random


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 = [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:  # !!!
            return


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]
最终排序结果: [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

        if not tag:
            return


l1 = 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 = True

if 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.mfbz.cn/a/237238.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

排序-选择排序与堆排序

文章目录 一、选择排序二、堆排序三、时间复杂度四、稳定性 一、选择排序 思想&#xff1a; 将数组第一个元素作为min&#xff0c;然后进行遍历与其他元素对比&#xff0c;找到比min小的数就进行交换&#xff0c;直到最后一个元素就停止&#xff0c;然后再将第二个元素min&…

使用NCNN在华为M5部署MobileNet-SSD

一、下载ncnn-android-vulkan ncnn-android-vulkan.zip 文件是一个压缩文件&#xff0c;其中包含了 ncnn 框架在 Android 平台上使用 Vulkan 图形库加速的相关文件和代码。 在 Android 平台上&#xff0c;ncnn 框架可以利用 Vulkan 的并行计算能力来进行神经网络模型的推理计…

算法——位运算

常见位运算总结 基础位运算 << >> ~与&&#xff1a;有0就是0或|&#xff1a;有1就是1异或^&#xff1a;相同为0&#xff0c;相异为1 / 无进位相加 给一个数n&#xff0c;确定他的二进制表示中的第x位是0还是1 让第x位与上1即可先让n右移x位&上一个1&#…

【docker三】Docker镜像的创建方法

目录 一、Docker镜像&#xff1a; 1、 镜像的概念 2、docker的创建镜像方式&#xff1a; 1.1、基于已有镜像进行创建&#xff1a; 1.2、基于模版创建&#xff1a; 1.3、基于dockerfile创建&#xff1a; 二、Dockerfile概述 1、Dockerfile概念&#xff1a; 2、dockerfile…

【UI自动化测试】appium+python+unittest+HTMLRunner

简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自动化测试的App并安装到手机 获取AppPackage和AppActivity 参考&#xff…

AWS攻略——使用中转网关(Transit Gateway)连接不同区域(Region)VPC

文章目录 Peering方案Transit Gateway方案环境准备创建Transit Gateway Peering Connection接受邀请修改中转网关路由修改被邀请方中转网关路由修改邀请方中转网关路由 测试修改Public子网路由 知识点参考资料 区别于 《AWS攻略——使用中转网关(Transit Gateway)连接同区域(R…

云降水物理基础

云降水物理基础 云的分类 相对湿度变化方程 由相对湿度的定义&#xff0c;两边取对数之后可以推出 联立克劳修斯-克拉佩龙方程&#xff08;L和R都为常数&#xff09; 由右式看出&#xff0c;增加相对湿度的方式&#xff1a;增加水汽&#xff08;de增大&#xff09;和降低…

SpringData JPA 搭建 xml的 配置方式

1.导入版本管理依赖 到父项目里 <dependencyManagement><dependencies><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-bom</artifactId><version>2021.1.10</version><scope>…

全新UI彩虹外链网盘系统源码V5.5/支持批量封禁+优化加载速度+用户系统与分块上传

源码简介&#xff1a; 全新UI彩虹外链网盘系统源码V5.5&#xff0c;它可以支持批量封禁优化加载速度。新增用户系统与分块上传。 彩虹外链网盘&#xff0c;作为一款PHP网盘与外链分享程序&#xff0c;具备广泛的文件格式支持能力。它不仅能够实现各种格式文件的上传&#xff…

数据接口测试工具 Postman 介绍!

此文介绍好用的数据接口测试工具 Postman&#xff0c;能帮助您方便、快速、统一地管理项目中使用以及测试的数据接口。 1. Postman 简介 Postman 一款非常流行的 API 调试工具。其实&#xff0c;开发人员用的更多。因为测试人员做接口测试会有更多选择&#xff0c;例如 Jmeter…

LeetCode-周赛-思维训练-中等难度

第一题 1798. 你能构造出连续值的最大数目 解题思路 我们先抛开原题不看&#xff0c;可以先完成一道简单的题目&#xff0c;假设现在就给你一个目标值X&#xff0c;问你能够构造出从【1~X】的连续整数&#xff0c;最小需要几个数&#xff1f; 贪心假设期望&#xff1a;我们要…

node14升级node16之后,webpack3项目无法启动处理

node从14升级到16之后&#xff0c;项目就无法启动了&#xff0c;研究了webpack3升级5&#xff0c;研究好几个小时都无法启动&#xff0c;最后发现&#xff0c;微微升级几个版本就可以了。webpack还是3 版本改了好多个的&#xff0c;但是不确定具体是哪几个起作用的&#xff0c;…

【LVGL】STM32F429IGT6(在野火官网的LCD例程上)移植LVGL官方的例程(还没写完,有问题 排查中)

这里写目录标题 前言一、本次实验准备1、硬件2、软件 二、移植LVGL代码1、获取LVGL官方源码2、整理一下&#xff0c;下载后的源码文件3、开始移植 三、移植显示驱动1、enable LVGL2、修改报错部分3、修改lv_config4、修改lv_port_disp.c文件到此步遇到的问题 Undefined symbol …

Docker中部署ElasticSearch 和Kibana,用脚本实现对数据库资源的未授权访问

图未保存&#xff0c;不过文章当中的某一步骤可能会帮助到您&#xff0c;那么&#xff1a;感恩&#xff01; 1、docker中拉取镜像 #拉取镜像 docker pull elasticsearch:7.7.0#启动镜像 docker run --name elasticsearch -d -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -e…

数字图像处理(实践篇)二十一 人脸识别

目录 1 安装face_recognition 2 涉及的函数 3 人脸识别方案 4 实践 使用face_recognition进行人脸识别。 1 安装face_recognition pip install face_recognition 或者 pip --default-timeout100 install face_recognition -i http://pypi.douban.com/simple --trusted-…

c#读取XML文件实现晶圆wafermapping显示demo计算电机坐标控制电机移动

c#读取XML文件实现晶圆wafermapping显示 功能&#xff1a; 1.读取XML文件&#xff0c;显示mapping图 2.在mapping视图图标移动&#xff0c;实时查看bincode,x,y索引与计算的电机坐标 3.通过设置wafer放在平台的位置x,y轴电机编码值&#xff0c;相机在wafer的中心位置&#…

类与接口常见面试题

抽象类和接口的对比 抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。 从设计层面来说&#xff0c;抽象类是对类的抽象&#xff0c;是一种模板设计&#xff0c;接口是行为的抽象&#xff0c;是一种行为的规范。 相同点 接口和抽象类都不能实例化都位于继承的顶端…

每日一题,头歌平台c语言题目

任务描述 题目描述:输入一个字符串&#xff0c;输出反序后的字符串。 相关知识&#xff08;略&#xff09; 编程要求 请仔细阅读右侧代码&#xff0c;结合相关知识&#xff0c;在Begin-End区域内进行代码补充。 输入 一行字符 输出 逆序后的字符串 测试说明 样例输入&…

老师们居然这样把考试成绩发给家长

教育是一个复杂而多元的过程&#xff0c;其中考试成绩的发布和沟通是教育过程中的一个重要环节。然而&#xff0c;有些老师在发布考试成绩时&#xff0c;采取了一些不恰当的方式&#xff0c;给家长和学生带来了不必要的困扰和压力。本文将探讨老师们不应该采取的发布考试成绩的…

六级高频词组1

目录 词组 参考链接 词组 1. abide by&#xff08;be faithful to &#xff1b;obey&#xff09;忠于&#xff1b;遵守。 2. be absent from… 缺席&#xff0c;不在 3. absence or mind&#xff08;being absent-minded&#xff09; 心不在焉 4. absorb&#xff08;take …