《大话数据结构》第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.mzph.cn/news/267833.shtml

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

相关文章

五款常用邮件管理系统评测

以邮件为主要沟通媒介的外贸企业&#xff0c;对邮件的依赖性可以说已经达到不能或缺的地步。软件厂商们深谙这一定律&#xff0c;为外贸企业提供了种类庞大的软件系统以供选择。以下笔者抽出其中五款使用较为普遍的邮件管理系统&#xff0c;根据其性能、系统稳定性、性价比等方…

gradle各版本下载地址

gradle各版本下载地址 原创 2016年08月16日 11:17:25标签&#xff1a;gradle更新 /android studio59713gradle各版本下载地址&#xff1a;http://services.gradle.org/distributions 以前都是手动下载gradle的文件&#xff0c;然后修改的&#xff0c;今天想从一些博客网站上下载…

thinkphp 5数据库操作

1、原生sql $optionsDb::table(__MALL_POST__) ->alias(m) ->join(__MALL_CATEGORY_VALUE__ v,m.id v.itemid) ->join(__MALL_CATEGORY_OPTION__ o,v.oid o.oid) ->where(m.id,$articleId) ->select(); 参见 &#xff1a;https://www.kancloud.cn/manual/thin…

JAVA中常用的逻辑运算符_Java中的常见运算符以及使用

Java中的运算符有算术运算符、关系运算符、逻辑运算符、赋值运算符、字符串连接运算符、三目运算符等。下面介绍一下这几种。1、算术运算符包括&#xff1a;加()、减(-)、乘(*)、除(/)、取余(%)、自加()、自减(--)。<1>使用乘法时&#xff0c;需注意乘积结果是否会出现溢…

Ext智能提示 - Spket(Eclipse插件)

Eclipse的Ext 2.0.2智能提示.它提供了非常准确的Ext API提示 最近在搞java的项目&#xff0c;哇哇&#xff0c;js如果没有插件的话&#xff0c;那写的真的叫痛苦&#xff0c;所以上网搜搜了&#xff0c;找到了一个插件&#xff0c;还不错&#xff0c;蛮好用的 首先下一个插…

putty, puttycm区别

2019独角兽企业重金招聘Python工程师标准>>> 在windows上实现telnet, ssh等工具有几个方案可以选择, 本文总结了putty putty cm的方案, 并且简短地和 cygwin console2方案做了一下比较. 由于putty的安装 配置比较简单, 本文主要讨论了Putty cm的配置和中文的支持.…

使用jQuery Treeview插件实现树状结构效果

首先到一个国外网站上下载Treeview插件&#xff1a;http://bassistance.de/jquery-plugins/jquery-plugin-treeview/当然你也可以通过我博客的源文件直接下载&#xff1a;http://files.cnblogs.com/jishume/jquery_api_for_dw4.rar 为了形象一点&#xff0c;先看一个效果图&…

冲刺二周04

第四天&#xff1a; 昨天干什么&#xff1a;完成搜索界面 今天干什么&#xff1a;编写模糊查询搜索的代码 遇见什么问题&#xff1a;不熟悉 团队成员会议照&#xff1a; 转载于:https://www.cnblogs.com/ghl0518/p/8301051.html

zabbix查看mysql同步_Zabbix 检测Mysql数据库的主从同步

在高并发网站架构中&#xff0c;MySQL数据库主从同步是不可或缺的&#xff0c;不过经常会发生由于网络原因或者操作错误&#xff0c;MySQL主从经常会出现不同步的情况&#xff0c;那么如何监控MySQL主从同步&#xff0c;也变成检测网站正常运行的重要环节。MySQL同步功能由3个线…

二手手机交易平台使用MYSQL的方法_安卓Android校园淘(二手交易)APP设计与实现(MySQL)...

安卓Android校园淘(二手交易)APP设计与实现(MySQL)(任务书,开题报告,中期检查表,文献综述,外文翻译,毕业论文14000字,程序代码,MySQL数据库)本项目就是一个基于Android平台的校园淘APP设计&#xff0c;采用了Struts技术&#xff0c;JDBC技术和Android的基础技术完成开发。收录了…

ADSL之PPPOE

大家好&#xff01;我是书记&#xff0c;今天我来小谈一下网络中的PPPOE技术。 PPPOE&#xff08;Point to Point Protocol over Ethernet&#xff09;以太网点到点协议&#xff0c;简单的说&#xff0c;是以太网协议和PPP协议结合后所产生的协议&#xff0c;是在PPP协…

LAMP环境下ECShop系统部署

作业环境服务器端&#xff1a;RHEL6.0 IP&#xff1a;10.8.110.8 客户端&#xff1a;Windows 7 IP&#xff1a;10.8.110.28 一、ECShop简介 ECShop是上海商派网络科技有限公司&#xff08;ShopEx&#xff09;旗下——B2C独立网店系统&#xff0c;适合企业及个人快速构建个…

SQL Server代理的阶梯 - 第2级:作业步骤和子系列

作者&#xff1a;Richard Waymire&#xff0c;2017/10/11&#xff08;第一版&#xff1a;2011/02/17&#xff09; 原文链接&#xff1a;http://www.sqlservercentral.com/articles/SQLAgent/JobStepsandSubsystems/72268/ 该系列 本文是“Stairway系列&#xff1a;SQL Server代…

如何快速将文本中的tab更换成逗号(图文详解)

不多说&#xff0c;直接上干货&#xff01; 现有一份数据如下。 下载日志数据并分析 到搜狗实验室下载用户查询日志 1) 介绍 搜索引擎查询日志库设计为包括约1个月(2008年6月)Sogou搜索引擎部分网页查询需求及用户点击情况的网页查询日志数据集合。为进行中文搜索引擎用户行为…

Commit Monitor–svn监控工具

SVN更改通知的工具&#xff0c;在这里分享给大家。 自己负责的模块代码有时被同事修改&#xff0c;但是没有知会&#xff0c;也不容易了解到具体的改动内容&#xff0c;可能造成各种各样的问题。这里推荐一个工具Commit Monitor&#xff0c;可以监控svn仓库的提交记录&#xff…

java如何实现Socket的长连接和短连接

讨论Socket必讨论长连接和短连接 一、长连接和短连接的概念 1、长连接与短连接的概念&#xff1a;前者是整个通讯过程&#xff0c;客户端和服务端只用一个Socket对象&#xff0c;长期保持Socket的连接&#xff1b;后者是每次请求&#xff0c;都新建一个Socket,处理完一个请求就…

疯狂的java 目录_疯狂创客圈 JAVA 高并发 总目录

无编程不创客&#xff0c;疯狂创客圈&#xff0c;一大波编程高手正在交流、学习中!疯狂创客圈&#xff1a; JAVA 高并发 研习社群&#xff0c; QQ群&#xff1a;104131248(已满) 236263776 (请加此群)疯狂创客圈 经典图书 &#xff1a; 《Netty Zookeeper Redis 高并发实战…

也谈云计算

云计算的介绍和讨论不时见诸于报章网端&#xff0c;但是基本上是各说各话&#xff0c;众说纷纭中让大家仍然感觉云里雾里&#xff0c;不见明路。 本文没有涵盖全部的观点&#xff0c;但却希望提供一种思路&#xff0c;大家共同探讨云的建设。云计算是英文Cloud Computing的翻译…

用phpmyadmin更改root密码的方法

首先用root账号登陆phpmyadmin&#xff0c;然后点击左侧进入mysql数据库&#xff0c;在顶部点击“mysql”进入sql输入界面。输入以下命令&#xff1a; update user set passwordpassword(root) where Userroot root为你希望修改的密码&#xff0c;切记不要在数据库中直接手工修…

Android开发 ---多线程操作:Handler对象,消息队列,异步任务下载

效果图&#xff1a; 1、activity_main.xml 描述&#xff1a;定义了六个按钮 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/activity_main&quo…