冒泡排序和递归排序

目录

一.冒泡排序

1.1概念:

1.2原理:

1.3简单示例讲解:

二.递归排序

1.1概念:

1.2原理:

1.3简单示例讲解:


一.冒泡排序

1.1概念:

冒泡排序是一种最基础的交换排序。

通过反复交换相邻两个元素的位置,使得每一轮循环都能将未排序的部分中的最大元素移动到数组的末尾。

因为越小的元素会经由交换像是气泡一样慢慢浮到数组的顶端,所以叫做冒泡排序。

1.2原理:

从数组的第一个元素开始,依次比较相邻的两个元素大小。

如果前面的元素比后面的元素大,就交换它们的位置,这样一轮比较下来,最大的元素就被交换到数组的最后一个位置了。

接下来,重复这个过程,有n个元素,就要重复n-1次,直到所有元素都被排序为止。

1.3简单示例讲解:

#定义一个数列,作为理解。ls=[9,5,2,7,6,4,1]
ls = [9,5,2,7,6,4,1]
for i in range(0,len(ls)-1):for j in rang(0,len(ls)-1):if ls[j] >= ls[j+1]:   ls[j],ls[j+1] = ls[j+1],ls[j]
print(ls)#函数(作为初学者,要学会习惯用函数来进行分治解决)def bubble_sort(ls):for i in range(len(ls)):for j in range(len(ls)):if ls[j] >= ls[j+1]:ls[j],ls[j+1] = ls[j+1],ls[j]return ls

首先,要获取数列的长度,可以用len()函数来解决,之后通过两个循环嵌套实现冒泡排序。外层循环用来遍历整个数组,内层循环则用来处理未排序的部分。

内循环中,比较两个相邻的元素大小,如果前一个元素比后一个元素大,那么就交换两个元素的位置。这样,每一轮遍历就能将未排序部分中的最大元素交换到数组的末尾。

达成排序的目的。

二.递归排序

1.1概念:

这里讲解的是一种最基础的递归排序。

递归,简而言之,就是函数自己调用自己。递归作为一种算法在程序设计语言中广泛应用。

递归是一个过程或函数在其定义或者说明中有直接或者间接调用自身的一种方法,通常把一个大的复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。

递归算法只需要少量的程序就能描述出解题过程中所需要的多次重复计算,大大的减少了程序的代码量。

1.2原理:

选择一个值作为key,再将key和其他数一一比较,比它大的放在原来的位置,比它小的数则和key互换位置,到最后实现数据大小的排序。

在这个问题中,我们可以将第一个元素作为key。

1.3简单示例讲解:

#定义一个函数,有三个参数,vect:待排序的序列,first:当前处理的起始位置,last:当前处理的结束位置(不包含)。def resort(vect,first,last):if first == last:   #函数首先判断first=last,即起始位置等于结束位置,就输出当前列表print(vect)else:for i in range(first,last):Min = min (vect[first:last])index = vect.index(Min)#找到first到last范围内的最小值Min,并找到其索引indexvect[first],vect[index] = vect[index],vect[first]#将第first个元素和最小值Min交换位置resort(vect,first+1,last)#调用resort函数,起始位置+1继续排列return vectvect = [5,8,10,20,9,7,1]
resort(vect,0,len(vect))

在上述代码中,我们是直接在原来的数列上进行排序,存在一些问题,可以使用copy.deepcopy()来创建vect新副本,以此避免修改原始列表,以下是修正后的代码:

import copydef resort(vect, first, last):if first == last:print(vect)else:for i in range(first, last):new_vect = copy.deepcopy(vect)  # 创建副本Min = min(new_vect[first:last])index = new_vect.index(Min)new_vect[first], new_vect[index] = new_vect[index], new_vect[first]resort(new_vect, first+1, last)# 测试代码
vect = [5, 8, 10, 20, 9, 7, 1]
resort(vect, 0, len(vect))

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

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

相关文章

Jupyter Lab 软件安装与使用

软件简介 Jupyter Lab 软件是一个基于web 的交互式开发环境,集成了代码编辑器、终端、文件管理器等功能,使得开发者可以在一个界面中完成各种任务。JupyterLab是Jupyter Notebook的全面升级,是一个集文本编辑器、终端以及各种个性化组件于一…

Java进阶学习笔记29——Math、System、Runtime

Math: 代表的是数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法。 示例代码: package cn.ensourced1_math;public class MathTest {public static void main(String[] args) {// 目标:了解Math类提供…

那智不二越机器人维修案例分享

那智不二越工业机器人在工业范围内广泛应用于各种生产领域。其示教器作为人机交互的重要设备,常常需要定期维护和Nachi不二越机械手示教盒修理。 【Nachi不二越机器人示教器维修步骤】 1. 关闭电源 在进行任何那智不二越机器人维修操作之前,务必确保机器…

<商务世界>《75 微课堂<茶叶(1)-质量分级>》

1 中国茶叶分级 中国的10级标准是按照茶叶的外观、香气、滋味、汤色、叶底五个方面进行评分,分别用10分制进行评分,总分为50分,得分越高,茶叶的品质就越高。具体的分数和等级如下表所示: 2 每级的特点 茶叶的质量等级…

OceanBase SQL 诊断和调优实践——【DBA从入门到实践】第七期

数据库作为绝大多数应用系统储存数据的核心系统,在用户系统需要访问数据时,有着至关重要的作用。在这些交互中,SQL 语言是应用与数据库系统之间“沟通”的桥梁,它负责将应用的指令传达给数据库。因此,SQL 的性能好坏直…

弱类型解析

php中 转化为相同类型后比较 先判断数据类型后比较数值 var_dump("asdf"0);#bool(true) var_dump("asdf"1);#bool(false) var_dump("0asdf"0);#bool(true) var_dump("1asdf"1);#bool(true)1、md5撞库 例&#xff1a; <?php incl…

【智能算法应用】模拟退火算法求解多车型车辆路径问题HFVRP

目录 1.算法原理2.多车型车辆路径HFVRP数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 模拟退火算法&#xff08;Simulated Annealing, SA&#xff09;是一种通用概率算法&#xff0c;用于在给定一个大的搜索空间内寻找问题的近似最优解。这种算法受到物理中退火过程的启…

ffplay 使用文档介绍

ffplay ffplay 是一个简单的媒体播放器,它是 FFmpeg 项目的一部分。FFmpeg 是一个广泛使用的多媒体框架,能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎所有类型的媒体文件。 ffplay 主要用于测试和调试,因为它提供了一个命令行界面,可以方便地查看媒体文件的…

消息队列拉模式下的订阅关系不一致问题及解决方法

引言 在分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff0c;MQ&#xff09;是一种常用的组件&#xff0c;用于解耦生产者和消费者&#xff0c;缓解系统负载&#xff0c;提升系统的可靠性和可扩展性。在Java行业中&#xff0c;常见的消息队列中间件有Apach…

烟囱ERP系统

一、烟囱系统定义 “烟囱式”系统&#xff0c;来自维基百科的解释是&#xff1a;一种不能与其他系统进行有效协调工作的信息系统&#xff0c;又称为孤岛系统。 二、烟囱系统的案例 比如&#xff1a;就像以下一样&#xff0c;各个系统之间是独立的&#xff0c;所有对接是通过…

深度学习复盘与小实现

文章目录 一、查漏补缺复盘1、python中zip()用法2、Tensor和tensor的区别3、计算图中的迭代取数4、nn.Modlue及nn.Linear 源码理解5、知识杂项思考列表6、KL散度初步理解 二、处理多维特征的输入1、逻辑回归模型流程2、Mini-Batch (N samples) 三、加载数据集1、Python 魔法方法…

【Android】安卓设备上的Fastboot模式详解与使用指南

原谅把你带走的雨天 在渐渐模糊的窗前 每个人最后都要说再见 原谅被你带走的永远 微笑着容易过一天 也许是我已经 老了一点 那些日子你会不会舍不得 思念就像关不紧的门 空气里有幸福的灰尘 否则为何闭上眼睛的时候 又全都想起了 谁都别说 让我一个人躲一躲 你的承诺 我竟然没怀…

c++笔记3

优先队列 普通的队列是一种先进先出的数据结构&#xff0c;元素在队列尾追加&#xff0c;而从队列头删除。优先队列是一种按照优先级决定出队顺序的数据结构&#xff0c;优先队列中的每个元素被赋予级别&#xff0c;队首元素的优先级最高。 例如&#xff1a;4入队&#xff0c…

多文件和静态/动态链接以及虚拟内存管理

多目标文件链接 //stack.c char stack[512]; int top -1; void push(char c){stack[top] c; }char pop(void){return stack[top--]; }int is_empty(void){return top 1; }// main.c #include <stdio.h> int a,b 1; int main(){ push(a); push(b); push(c); while(!is…

Vue项目中npm run build 卡住不执行的几种情况(实战版)

方法一 一&#xff1a;比较常见是镜像导致的原因 我们可以找到build/check-versions文件 将这段代码注释,重新运行就可以解决这个问题 if (shell.which(npm)) {versionRequirements.push({name: npm,currentVersion: exec(npm --version),versionRequirement: packageConfig.en…

MySQL 存储过程返回更新前记录

在MySQL中&#xff0c;如果我们想在存储过程中返回更新前的记录&#xff0c;这通常不是直接支持的&#xff0c;因为UPDATE语句本身不返回更新前的数据。但是&#xff0c;我们可以通过一些策略来实现这个需求。 1.MySQL 存储过程返回更新前记录常用的方法策略 以下是一个常见的…

应用程序图标提取

文章目录 [toc]提取过程提取案例——提取7-zip应用程序的图标 提取过程 找到需要提取图标的应用程序的.exe文件 复制.exe文件到桌面&#xff0c;并将复制的.exe文件后缀改为.zip 使用解压工具7-zip解压.zip文件 在解压后的文件夹中&#xff0c;在.rsrc/ICON路径下的.ico文件…

代码随想录-Day20

654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums…

ROS | 激光雷达包格式

ros激光雷达包格式&#xff1a; C实现获取雷达数据 &#xff1a; C语言获取雷达数据&#xff1a; Python语言获取雷达数据&#xff1a; python不需要编译&#xff0c;但是需要给它一些权限 chmod x lidar_node.py(当前的文件名字&#xff09; C实现雷达避障&#xff1a; python…

【Xilinx】常用的全局时钟资源相关Xilinx器件原语

1 概述 常用的与全局时钟资源相关的Xilinx器件原语包括&#xff1a; IBUFGIBUFGDS、OBUFGDS 和 IBUFDS、OBUFDSBUFGBUFGPBUFGCEBUFGMUXBUFGDLLIBUFDS_GTXE1IBUFDS_GTE2IBUFDS_GTE3OBUFDS_GTE3IBUFDS_GTE4OBUFDS_GTE4DCM 刚开始看到这写源语&#xff0c;免不了好奇这些源语对应的…