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 冒泡排序(上)相关推荐

  1. 大话数据结构 第七章 图(二) 最小生成树、最短路径、拓扑排序、关键路径算法

    大话数据结构 第七章 图(二) 最小生成树.最短路径.拓扑排序.关键路径算法 最小生成树 定义 Prim算法 Kruskal算法 最短路径 Dijkstra算法 Floyd算法 拓扑排序 AOV网 拓 ...

  2. 《大话数据结构》样章试读

    <大话数据结构>样章试读 各位童鞋,<大话数据结构>从写作到出版,虽然经历了一些坎坷,但终于还是在今天正式在一些网店发售了.现在提供两章的完整版试读PDF文件,希望能给您有所 ...

  3. 《大话数据结构》第9章 排序 9.3 冒泡排序(下)

    9.3.2 冒泡排序算法 我们来看看正宗的冒泡算法,有没有什么改进的地方. /* 对顺序表L作冒泡排序 */void BubbleSort(SqList *L){ int i,j;for(i=1;i& ...

  4. 读书笔记-《大话数据结构》第二章算法

    2.3两种算法的比较 #include <iostream> #if 0 //需要运行 100次 int main() {int i,sum=0,n=100;for(i=1;i<=n ...

  5. 【大话数据结构算法】希尔排序

    希尔排序的实质就是分组插入排序,该方法又称为缩小增量排序. 直接插入排序适合于序列基本有序的情况,希尔排序的每趟排序都会使整个序列变得更加有序,等整个序列基本有序了,再来一趟直接插入排序,这样会使排序 ...

  6. 大话数据结构 摘录 第一章 数据结构绪论

    文章目录 启示:数据结构 学习数据机构的重要性 数据结构引发的案例 数据结构的起源 程序设计=数据结构+算法 基础概念与术语 数据 数据元素 数据项 数据对象 数据结构 数据结构:是相互之间存在一种或 ...

  7. 读书笔记-《大话数据结构》第一章数据结构绪论

    1.3数据结构的起源 数据结构:是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科. 程序设计=数据结构+算法 1.4基本概念和术语 1.4.1数据:描述客观事物 ...

  8. 大话数据结构第四章栈的应用

    一.斐波契那数列 就是下一项的值等于相邻的上两项元素之和. 这个规律就是斐波契那数列.由此,我知道这个世界是少不了规律的.就算没有规律也要用规律来逼近描述无规律的现象. 迭代和递归的区别:迭代是循环, ...

  9. 大话数据结构第四章栈的基本概念与出栈入栈操作

    一.栈的顺序存储结构 1.基本概念 栈顶就是表尾. 栈顶是栈插入和删除的地方. 栈就是只允许在表尾进行添加或删除,是顺序存储结构线性表的特例或者说简化. 为什么说是简化呢?相对于顺序存储结构来说栈只允 ...

最新文章

  1. 重磅盘点:过去8年中深度学习最重要的想法
  2. 第十九章 9标签类Label
  3. [Ubuntu] 启动gvim时,怎样设置一个项目的文件为打开状态
  4. 关于眼界、眼光、眼前的哪些....
  5. mysql权限层级体系_MySQL权限体系介绍
  6. no module named numpy_nn.functional和nn.Module
  7. java线程锁标记_java 线程 中断标志位
  8. 基于oneAPI的OSU MPI Benchmarks 5.7编译安装
  9. 2023年东南大学集成电路设计考研考情与难度、参考书及上岸前辈备考经验
  10. WhatsApp翻译器 — tranworld翻译助手,ZALO LINE KaKao badoo buble tiktok facebook 社交聊天软件一键自动双向即时翻译
  11. 关于医学影像中的轴位面(横断面)、冠状面、矢状面的解释(转载)
  12. Cartopy绘图入门指南
  13. MySQL怎么打开explain_MySql性能加速分析以及PHPMYADMIN中explain用法
  14. F. Clear the String (区间DP)
  15. 在VR里弹空气吉他?开发者:手势优化有技巧
  16. 教育消费分期系统介绍
  17. Python多线程实现WIFI破解
  18. document.getElementById(id) 与 $(#id) 的区别
  19. 国内Cortex-M内核MCU产品性能哪家强?
  20. 队残冒逃茸霞桥镭砸的

热门文章

  1. Java Review - 并发编程_ 回环屏障CyclicBarrier原理源码剖析
  2. jvm性能调优 - 06线上应用部署JVM实战_堆内存预估与设置
  3. Quartz-Trigger详解
  4. android 高德地图提示限速信息,高德导航不提示限速拍照了是怎么回事?该怎么办?...
  5. java中文版src_java Web开发医药后台管理系统mysql版本源代码下载,支持中英文
  6. docker 启动 springboot 项目
  7. MongoDB自动删除过期数据--TTL索引
  8. idea打包成jar包或war包
  9. linux安装virtualbox命令,在Linux中从命令行查找Virtualbox Version的方法
  10. asp php时间格式,ASP_asp格式化日期时间格式的代码,' ====================================== - phpStudy...