《大话数据结构》第9章 排序 9.3 冒泡排序(上)
9.3.1 最简单排序实现
无论你学习哪种编程语言,在学到循环和数组时,通常都会介绍一种排序算法来作为例子,而这个算法一般就是冒泡排序。并不是它的名称很好听,而是说这个算法的思路最简单,最容易理解。因此,哪怕大家可能都已经学过冒泡排序了,我们还是从这个算法开始我们的排序之旅。
冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。冒泡的实现在细节上可以很多种变化,我们将分别就3种不同的冒泡实现代码,来讲解冒泡排序的思想。这里,我们就先来看看比较容易理解的一段。
/* 对顺序表L作交换排序(冒泡排序初级版) */void BubbleSort0(SqList *L){ int i,j;for(i=1;i<L->length;i++){for(j=i+1;j<=L->length;j++){if(L->r[i]>L->r[j]){swap(L,i,j); /* 交换L->r[i]与L->r[j]的值 */}}}}
这段代码严格意义上说,不算是标准的冒泡排序算法,因为它不满足“两两比较相邻记录”的冒泡排序思想,它更应该是最最简单的交换排序而已。它的思路就是让每一个关键字,都和它后面的每一个关键字比较,如果大则交换,这样第一位置的关键字在一次循环后一定变成最小值。如图9-3-2,假设我们待排序的关键字序列是{9,1,5,8,3,7,4,6,2},当i=1时,9与1交换后,在第一位置的1与后面的关键字比较都小,因此它就是最小值。当i=2时,第二位置先后由9换成5,换成3,换成2,完成了第二小的数字交换。后面的数字变换类似,不再介绍。
它应该算是最最容易写出的排序代码了,不过这个简单易懂的代码,却是有缺陷的。观察后发现,在排序好1和2的位置后,对其余关键字的排序没有什么帮助(数字3反而还被换到了最后一位)。也就是说,这个算法的效率是非常低的。
出处:http://www.cnblogs.com/cj723/archive/2011/04/15/2016679.html
《大话数据结构》第9章 排序 9.3 冒泡排序(上)相关推荐
- 大话数据结构 第七章 图(二) 最小生成树、最短路径、拓扑排序、关键路径算法
大话数据结构 第七章 图(二) 最小生成树.最短路径.拓扑排序.关键路径算法 最小生成树 定义 Prim算法 Kruskal算法 最短路径 Dijkstra算法 Floyd算法 拓扑排序 AOV网 拓 ...
- 《大话数据结构》样章试读
<大话数据结构>样章试读 各位童鞋,<大话数据结构>从写作到出版,虽然经历了一些坎坷,但终于还是在今天正式在一些网店发售了.现在提供两章的完整版试读PDF文件,希望能给您有所 ...
- 《大话数据结构》第9章 排序 9.3 冒泡排序(下)
9.3.2 冒泡排序算法 我们来看看正宗的冒泡算法,有没有什么改进的地方. /* 对顺序表L作冒泡排序 */void BubbleSort(SqList *L){ int i,j;for(i=1;i& ...
- 读书笔记-《大话数据结构》第二章算法
2.3两种算法的比较 #include <iostream> #if 0 //需要运行 100次 int main() {int i,sum=0,n=100;for(i=1;i<=n ...
- 【大话数据结构算法】希尔排序
希尔排序的实质就是分组插入排序,该方法又称为缩小增量排序. 直接插入排序适合于序列基本有序的情况,希尔排序的每趟排序都会使整个序列变得更加有序,等整个序列基本有序了,再来一趟直接插入排序,这样会使排序 ...
- 大话数据结构 摘录 第一章 数据结构绪论
文章目录 启示:数据结构 学习数据机构的重要性 数据结构引发的案例 数据结构的起源 程序设计=数据结构+算法 基础概念与术语 数据 数据元素 数据项 数据对象 数据结构 数据结构:是相互之间存在一种或 ...
- 读书笔记-《大话数据结构》第一章数据结构绪论
1.3数据结构的起源 数据结构:是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科. 程序设计=数据结构+算法 1.4基本概念和术语 1.4.1数据:描述客观事物 ...
- 大话数据结构第四章栈的应用
一.斐波契那数列 就是下一项的值等于相邻的上两项元素之和. 这个规律就是斐波契那数列.由此,我知道这个世界是少不了规律的.就算没有规律也要用规律来逼近描述无规律的现象. 迭代和递归的区别:迭代是循环, ...
- 大话数据结构第四章栈的基本概念与出栈入栈操作
一.栈的顺序存储结构 1.基本概念 栈顶就是表尾. 栈顶是栈插入和删除的地方. 栈就是只允许在表尾进行添加或删除,是顺序存储结构线性表的特例或者说简化. 为什么说是简化呢?相对于顺序存储结构来说栈只允 ...
最新文章
- 重磅盘点:过去8年中深度学习最重要的想法
- 第十九章 9标签类Label
- [Ubuntu] 启动gvim时,怎样设置一个项目的文件为打开状态
- 关于眼界、眼光、眼前的哪些....
- mysql权限层级体系_MySQL权限体系介绍
- no module named numpy_nn.functional和nn.Module
- java线程锁标记_java 线程 中断标志位
- 基于oneAPI的OSU MPI Benchmarks 5.7编译安装
- 2023年东南大学集成电路设计考研考情与难度、参考书及上岸前辈备考经验
- WhatsApp翻译器 — tranworld翻译助手,ZALO LINE KaKao badoo buble tiktok facebook 社交聊天软件一键自动双向即时翻译
- 关于医学影像中的轴位面(横断面)、冠状面、矢状面的解释(转载)
- Cartopy绘图入门指南
- MySQL怎么打开explain_MySql性能加速分析以及PHPMYADMIN中explain用法
- F. Clear the String (区间DP)
- 在VR里弹空气吉他?开发者:手势优化有技巧
- 教育消费分期系统介绍
- Python多线程实现WIFI破解
- document.getElementById(id) 与 $(#id) 的区别
- 国内Cortex-M内核MCU产品性能哪家强?
- 队残冒逃茸霞桥镭砸的
热门文章
- Java Review - 并发编程_ 回环屏障CyclicBarrier原理源码剖析
- jvm性能调优 - 06线上应用部署JVM实战_堆内存预估与设置
- Quartz-Trigger详解
- android 高德地图提示限速信息,高德导航不提示限速拍照了是怎么回事?该怎么办?...
- java中文版src_java Web开发医药后台管理系统mysql版本源代码下载,支持中英文
- docker 启动 springboot 项目
- MongoDB自动删除过期数据--TTL索引
- idea打包成jar包或war包
- linux安装virtualbox命令,在Linux中从命令行查找Virtualbox Version的方法
- asp php时间格式,ASP_asp格式化日期时间格式的代码,' ====================================== - phpStudy...