当前位置: 首页 > news >正文

【算法】冒泡排序

  • 一、算法图示
  • 二、算法思想
  • 三、代码实现

一、算法图示

在这里插入图片描述

二、算法思想

  1. 算法总体是从头至尾挨个对比,每个排序完成一个目标;
  2. 以序列7 1 5 4 1 8 11为例说明;
  3. 第一轮冒泡中,前两个数字对比,7比1大,因此互换;
    • 接着7和5对比,7比5大,互换;
    • 7接着和4对比,7比4大,互换;
    • 7接着和1对比,7比1大,互换;
    • 7接着和8对比,7比8小,不互换;
    • 8和11对比,8比11小,不互换
    • 第一轮完成后,11就排到了最后面;
  4. 第二轮冒泡中,5和4对比,5比4大,互换;
    • 5又比1大,互换;
    • 继续对比之后得到最后两个排序完成的序列;
  5. 其它的以此类推;

注意,如果一轮对比后没有发生交换,说明此时数列已经有序;

三、代码实现

pub fn bubble_sort<T: PartialOrd>(src:&mut Vec<T>){let length = src.len() - 1;for i in 0..length{let mut is_exchange = false;for j in 0..length-i{if src[j] > src[j + 1]{src.swap(j, j+1);is_exchange = true;}}if !is_exchange{break;}}
}#[cfg(test)]
mod tests{use super::*;#[test]fn bubble_sort_test(){let mut num = vec![ 7, 1, 5, 4, 1, 8, 11];bubble_sort(&mut num);assert_eq!(num, [1, 1, 4, 5, 7, 8, 11]);}
}
  • 由于是当前项和后一项对比,因此序列长度取为总长度 - 1
  • 由于第i次循环后最后的i个数字已经有序,因此内层循环的长度为总长度 - 1 - i
  • 如果一次循环过后没有发生值改变,说明序列已经有序,直接调用break退出;

测试结果
在这里插入图片描述

相关文章:

  • 白骑士的Python教学高级篇 3.4 Web开发
  • Python学习篇:Python基础知识(三)
  • Elasticsearch实战教程:如何使用集群索引数据来进行统计多个数据?
  • 通义千问接入进阶:流式、文件、图片、上下文
  • BAT批处理运行项目
  • 微信小程序毕业设计-社区门诊管理系统项目开发实战(附源码+论文)
  • C语言单链表的算法之删除节点
  • nginx的匹配及重定向
  • linux配置qqbot(Mirai+Alicebot)
  • 企业搭建知识库:解锁无限潜力的钥匙
  • Hadoop页面报错Permission denied: user=dr.who, access....
  • 详细分析Spring Boot 数据源配置的基本知识(附配置)
  • [C++初阶]vector的初步理解
  • 7.1作业6
  • vector与list的简单介绍
  • 【css3】浏览器内核及其兼容性
  • ES6 ...操作符
  • Linux下的乱码问题
  • orm2 中文文档 3.1 模型属性
  • React Native移动开发实战-3-实现页面间的数据传递
  • SAP云平台里Global Account和Sub Account的关系
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 给github项目添加CI badge
  • 后端_ThinkPHP5
  • 力扣(LeetCode)357
  • 那些被忽略的 JavaScript 数组方法细节
  • 携程小程序初体验
  • 原生Ajax
  • 运行时添加log4j2的appender
  • 自制字幕遮挡器
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # 达梦数据库知识点
  • #include到底该写在哪
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (a /b)*c的值
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (三)mysql_MYSQL(三)
  • (四)模仿学习-完成后台管理页面查询
  • (转)Windows2003安全设置/维护
  • (转)原始图像数据和PDF中的图像数据
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET CORE 第一节 创建基本的 asp.net core
  • .Net Core 中间件与过滤器
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @ConfigurationProperties注解对数据的自动封装
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [20180224]expdp query 写法问题.txt
  • [20181219]script使用小技巧.txt