HSP_07章 排序和查找

news2025/1/10 17:22:08

P96_ 冒泡排序

排序的基本介绍


在这里插入图片描述

冒泡排序介绍

在这里插入图片描述
在这里插入图片描述

冒泡排序思路分析

在这里插入图片描述

  • 代码
# 说明,如果只是完成排序功能,我们可以直接使用list的方法sort
# 排序的列表
num_list=[24,69,80,57,13,0,900,-1]
print("排序前".center(32,"-"))
print(f"num_list: {num_list}")
print("排序后".center(32,"-"))
# 使用sort方法完成排序
# num_list.sort()
# print(num_list)

def bubble_sort(my_list):

    # 使用冒泡排序,自己完成排序、目的了解底层原理,深刻理解
    # 以后遇到不同业务,需要定制排序,也能处理)
    """
        第一轮排序:把最大的数放到最后的位置
        第1次比较:[24,69,80,57,13]
        第2次比较:[24,69,80,57,13]
        第3次比较:[24,69,57,80,13]
        第4次比较:[24,69,57,13,80]
    """
    for i in range(1,len(my_list)):
        for j in range(0,len(my_list)-i):
            # 如果前面的元素 >后面的元素,就交换
            if my_list[j] > my_list[j+1]:
                my_list[j],my_list[j+1]=my_list[j+1],my_list[j]
        print(f"第{i}轮排序后的结果 my_list",my_list)

bubble_sort(num_list)

P97_顺序查找

查找的基本介绍

  1. 顺序查找
  2. 二分查找
  3. 插值查找
  4. 斐波那契查找
  5. 树表查找
  6. 分块查找
  7. 哈希查找
#编写顺序查找函数seq_search
def seq_search(my_list,find_val):
    """
    功能: 顺序查找指定的元素
    :param my_list: 传入的列表(即要查找的列表)
    :param find_val: 要在找的值 / 元素
    :return:如果查找到则返回对应的索引下标,否则返回 -1
    """
    pass
    """
        思路分析
        1. 对列表进行遍历,如果找到了,则返回对应的下标
        2. 如果遍历结束,没有找到,则返回-1
        
    """
    find_index  = -1
    for i in range(len(my_list)):
        if my_list[i] == find_val:
           print(f"恭喜,找到对应的值{find_val},下标是{i}")
           find_index =i
           break
    else:
        print(f"没有找到对应的值{find_val}")
    return  find_index
# 测试
res_index = seq_search(name_list,find_name)
print("res_index:",res_index)

P98_二分查找

1. 二分查找的思路分析

在这里插入图片描述

2. 二分查找的代码实现

"""
 二分查找的思路分析:
    前提: 该列表是一个排号序的列表(为了分析方便,就以从小到大的列表为例分析)
    1. 找到列表的中间数mid_val 和 find_val 比较
    2. 如果mid_val > find_val ,则到mid_val的左边查找
    3. 如果mid_val < find_val ,则到mid_val的右边查找
    4. 如果mid_val == find_val,则找到,返回对应的下标即可
    5. 不断的重复1-4步骤,这里就是不断的折半,使用while
    6. 如果while结束时,都没有找到,说明find_val没有在列表

"""
# 要查找的列表
num_list = [1, 8, 10, 89, 1000, 1234]


# 编写二分查找的函数
def binary_search(my_list, find_val):
    """
    功能: 完成二分查找
    :param my_list: 要查找的列表(默认有大小顺序)
    :param find_val: 要查找的元素/值
    :return: 如果找到返回对应的下标,如果没有找到,返回-1
    """
    # 定义左右边的索引
    left_index, right_index = 0, len(my_list) - 1
    find_index = -1
    # 使用while循环,不断的折半比较,比较的前提是满足left_index<=right_index
    while left_index <= right_index:
        # 中间数的下标/索引
        mid_index = (left_index + right_index) // 2
        # 2. 如果mid_val > find_val ,则到mid_val的左边查找
        if my_list[mid_index] > find_val:
            right_index = mid_index - 1
        # 3. 如果mid_val < find_val ,则到mid_val的右边查找
        elif my_list[mid_index] < find_val:
            left_index = mid_index + 1
        # 4. 如果mid_val == find_val,则找到,返回对应的下标即可
        elif my_list[mid_index] == find_val:
            find_index = mid_index
            break

    return find_index

# 测试
res_index = binary_search(num_list,1000)
if res_index == -1:
    print("没有找到该数")
else:
    print(f"找到数,对应的下标{res_index}")

注意事项和使用细节:

  1. 二分查找的前提是改列表已经是一个排好序的列表(从小到大或者从大到小)
  2. 排列的顺序是从小到大还是从大到小,会影响二分查找的代码逻辑

P99_作业练习

# 1、编程题 homework01.py
# 随机生成10个整数(1-100的范围)保存到列表,使用冒泡排序,对其进行从大到小排序
import random

rli = []

# 生成10个随机整数,并保存到列表
for x in range(10):
    r = random.randint(1, 100)
    rli.append(r)
print("排序开始前".center(32, "-"))

# 冒泡排序,对其进行从大到小排序
print("rli: ", rli)


def bubble_sort(rli):
    for i in range(1, len(rli)):
        for j in range(0, len(rli) - i):
            if rli[j] < rli[j + 1]:
                rli[j], rli[j + 1] = rli[j + 1], rli[j]


bubble_sort(rli)
print("排序后".center(32, "-"))
# 冒泡排序
print("rli: ", rli)


# 编程题 homework02.py
# 在第1题的基础上,使用二分查找,查找是否有8这个数,如果有,则返回对应的下标,如果没有,返回-1老韩提示: 注意这里要查找的列表是从大到小…

def binary_search(my_list, find_val):
    find_index = -1

    left_index, right_index = 0, len(my_list) - 1


    while left_index <= right_index:
        mid_index = (left_index + right_index) // 2
        if my_list[mid_index] > find_val:
            left_index = mid_index + 1
        elif my_list[mid_index] < find_val:
            right_index = mid_index - 1
        elif find_val == my_list[mid_index]:
            find_index = mid_index
            break
    return print("未找到该数") if find_index == -1 else print(f"已找到{find_val},对应的下标是{find_index}")


# 测试
binary_search(rli, 10)
# print(binary_search(rli, 10))


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ceph入门到精通-Bucket 生命周期的作用,新手该如何设置?

存储桶(Bucket)生命周期策略的作用主要是帮助存储管理员高效地管理对象的存储周期,包括对象的转换、存档和删除。以下是关于桶生命周期的作用和配置的概述: 一、桶生命周期的作用: 存储优化:通过将对象转换到更经济的存储类别,降低存储成本。 数据管理:自动删除不再需…

交换机简介

一、 集线器的替代品—交换机 使用集线器的缺点&#xff0c;因此就设计出了交换机来代替集线器&#xff0c;交换机常见端口数量一般有4、8、16、24、32等数量。 华为交换机&#xff1a;S5720-HI系列 仅从实物图上来看&#xff0c;交换机和集线器非常的像&#xff0c;但是它们的…

Python第二语言(十一、Python面向对象(下))

目录 1. 封装 1.1 私有成员&#xff1a;__成员、__成员方法 2. 继承&#xff1a;单继承、多继承 2.1 继承的基础语法 2.2 复写 & 子类使用父类成员 3. 变量的类型注解&#xff1a;给变量标识变量类型 3.1 为什么需要类型注解 3.2 类型注解 3.3 类型注解的语法 3.…

visio添加表格

插入Excel表格&#xff1a; 打开Microsoft Visio&#xff0c;新建一个空白画布。点击菜单栏中的“插入”。在插入中点击“图表”。在弹出的插入对象设置页面中选择“Microsoft Excel工作表”。点击确定按钮&#xff0c;然后在表格中输入内容。将鼠标点击到画布的空白处&#x…

大数据在商业中的应用——Kompas.ai如何助力企业决策

引言 在现代商业中&#xff0c;大数据逐渐成为企业决策的重要工具。通过对海量数据的分析和处理&#xff0c;企业可以获得重要的市场信息和决策支持。本文将探讨大数据在商业中的应用&#xff0c;并介绍Kompas.ai如何通过AI技术助力企业决策。 大数据的发展及其重要性 大数据…

迅狐跨境商城系统|全平台兼容|前端采用uni-app跨端框架,后端采用ThinkPHP5框架

高效实现全平台兼容的迅狐跨境商城系统 迅狐跨境商城系统是一款专为跨境电商企业设计的全平台兼容系统。其前端采用uni-app跨端框架&#xff0c;后端采用ThinkPHP5框架&#xff0c;旨在实现高效的开发和运营管理。 1. 全平台兼容的前端设计 迅狐跨境商城系统的前端采用uni-a…

MathType7.6永久免费功能强大的数学公式编辑器

亲爱的科技博主们&#xff0c;今天我要给大家种草一个神奇的工具——MathType 7.6&#xff01;&#x1f9ee;✨ 作为一名科技博主&#xff0c;我经常需要处理各种复杂的数学公式和符号。以前我总是为这个问题烦恼不已&#xff0c;但是自从我发现了MathType 7.6&#xff0c;一切…

语义分割和目标检测的关系

目录 1.语义分割的目标 2.目标检测的目标 3.两种任务的异同之处 从大方向的任务特点上来说 &#xff08;1&#xff09;物体的位置 &#xff08;2&#xff09;物体的分类 从数据格式来说 (1&#xff09;语义分割的数据格式 (2&#xff09;目标检测的数据格式 1.语义分…

AVR晶体管测试仪开源项目编译

AVR晶体管测试仪开源项目编译 &#x1f4cd;原项目地址&#xff1a;https://github.com/Mikrocontroller-net/transistortester/tree/master&#x1f33f; https://github.com/svn2github/transistortester&#x1f33f; https://github.com/wagiminator/ATmega-Transistor-Tes…

python 只有ListNode类的情况下,创建链表和遍历链表

class ListNode:def __init__(self, val0, nextNone):self.val valself.next nextif __name__ __main__: linklist dummy ListNode() for x in ([2,4,3]): linklist .next ListNode(x) linklist linklist .nextwhile dummy:print(dummy.val)dummy dummy.next 这里的…

互联网应用主流框架整合之SpringMVC基础组件开发

多种传参方式 在前一篇文章互联网应用主流框架整合之SpringMVC初始化及各组件工作原理中讨论了最简单的参数传递&#xff0c;而实际情况要复杂的多&#xff0c;比如REST风格&#xff0c;它往往会将参数写入请求路径中&#xff0c;而不是以HTTP请求参数传递&#xff1b;比如查询…

云渲染动画:C4D如何正确渲染导出动画?

​C4D是一款功能强大的3D建模、动画和渲染软件&#xff0c;在制作动画时&#xff0c;正确的渲染和导出流程至关重要&#xff0c;以确保动画质量和流畅性。 帧率概念 动画就是一幅幅图片连贯起来&#xff0c;30帧/秒&#xff0c;就是一秒出现30张图片一般国外都是30&#xff0c…

2024年6.18有必要购买正版FL Studio21吗?

对于是否需要购买FL Studio的正版软件&#xff0c;我们认为强烈推荐用户购买正版软件&#xff0c;而不是使用盗版软件。 FL Studio 21是一款功能强大的音乐编曲制作软件。尽管你可能没有接触过音乐制作&#xff0c;也能通过fl Studio 21&#xff0c;撰写&#xff0c;整理&#…

3dmax在设计3D模型时闪退解决方法---模大狮模型网

3ds Max 在设计 3D 模型时闪退可能由多种原因造成&#xff0c;以下是一些常见的解决方法&#xff1a; 更新显卡驱动程序&#xff1a; 一个过时或不稳定的显卡驱动程序可能导致 3ds Max 闪退。请确保你的显卡驱动程序是最新版本&#xff0c;并且与 3ds Max 兼容。 关闭不必要的…

轻易云-轻企AI知识库的智能创作与个性化管理

随着人工智能技术的飞速发展&#xff0c;AI助手正逐渐成为我们生活和工作中不可或缺的伙伴。轻易云AI助理&#xff0c;作为这一领域的佼佼者&#xff0c;以其无所不知、无所不能的AI创作模型&#xff0c;为用户带来了前所未有的智能体验。 一、AI创作模型的丰富性 在轻易云AI助…

CG-85D 振弦式渗压计厂家 测量孔隙水压力或液位

产品概述 振弦式渗压计适合埋设在水工建筑物和基岩内&#xff0c;或安装在测压管、钻孔、堤坝、管道或压力容器中&#xff0c;以测量孔隙水压力或液位。主要部件均采用特殊钢材制造&#xff0c;适合在各种恶劣环境中使用。特殊的稳定补偿技术使传感器具有极小的温度补偿系数。…

Python学习从0开始——Kaggle时间序列001

Python学习从0开始——Kaggle时间序列001 一、具有时间序列的线性回归1.时间序列2.时间序列线性回归1.时间步特征2.滞后特征 二、趋势1.介绍2.移动平均图3.设计趋向4.使用 三、季节性1.介绍2.季节图和季节指标季节性的指标 3.傅里叶特征和周期图用周期图选择傅里叶特征计算傅里…

智能生态网络(IEN)在智能城市中的应用

随着城市的发展&#xff0c;智能生态网络&#xff08;IEN&#xff09;正在改变城市的运作方式。对于城市白领来说&#xff0c;了解IEN如何提升城市生活质量、促进可持续发展和提高效率非常重要。 什么是智能生态网络&#xff08;IEN&#xff09;&#xff1f; IEN是一个将物联网…

手机如何扫描拍照?方法分享

手机如何扫描拍照&#xff1f;在数字化时代&#xff0c;手机扫描拍照软件已经成为我们日常生活和工作中不可或缺的工具。无论是快速识别纸质文档&#xff0c;还是将照片中的文字转化为可编辑的文本&#xff0c;这些软件都为我们提供了极大的便利。然而&#xff0c;市面上的手机…

【主要推荐算法概览,包括召回与排序】

文章目录 1、基于内容的推荐协同过滤推荐两大类2、召回算法2.1、基于规则策略的召回2.2、5类基础召回算法2.2.1、关联规则召回算法2.2.2、聚类召回算法2.2.3、朴素贝叶斯召回算法2.2.4、协同过滤召回算法2.2.5、矩阵分解召回算法 2.3、基于复杂算法的召回2.3.1、嵌入方法召回&a…