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

冒泡排序法与二分查找法

冒泡排序法与二分查找法


冒泡排序(Bubble Sort)

是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

 

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。

算法原理

冒泡排序算法的运作如下:(从后往前)
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

 

 

算法稳定性

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

 

 

二分查找法

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

算法要求

  1. 必须采用 顺序存储结构
     2.必须按关键字大小有序排列。
 

算法

二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.

它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右 半部继续搜索x。

posted on 2016-02-28 20:56 那消逝的岁月 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/future-zhenzhen/p/5225601.html

相关文章:

  • github回退版本时本地代码被覆盖(已解决)
  • CentOS 6.5系统上安装SVN服务器端的方法及目录访问权限配置(转总结)
  • 开发基于SpringBoot和BootStrap的全栈论坛网站(六):完成个人中心、问题详情和问题编辑
  • 开发基于SpringBoot和BootStrap的全栈论坛网站(七):完成回复和二级回复功能
  • 项目管理过程 工作绩效数据,信息和报告
  • 开发基于SpringBoot和BootStrap的全栈论坛网站(八):完成回复通知的功能
  • 架构师
  • SpringCloud微服务入门:使用idea搭建第一个微服务项目(附源码)
  • 图文详解YUV420数据格式
  • SpringCloud之服务注册中心--Eureka基础与进阶实战
  • 老李分享:loadrunner 的86401错误
  • SpringCloud之服务远程调用--ribbon的服务调用和负载均衡
  • SpringCloud之模板化Http客户端--Feign的入门和高级使用
  • Linux 添加开机启动项的两种方法
  • SpringCloud之容错框架--Hystrix的入门和高级使用
  • CSS 提示工具(Tooltip)
  • golang 发送GET和POST示例
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • IDEA常用插件整理
  • PaddlePaddle-GitHub的正确打开姿势
  • PAT A1050
  • PermissionScope Swift4 兼容问题
  • Python十分钟制作属于你自己的个性logo
  • SpiderData 2019年2月16日 DApp数据排行榜
  • vue--为什么data属性必须是一个函数
  • 深入 Nginx 之配置篇
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 用jquery写贪吃蛇
  • 怎样选择前端框架
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​人工智能书单(数学基础篇)
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (4) PIVOT 和 UPIVOT 的使用
  • (6)添加vue-cookie
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (八)Spring源码解析:Spring MVC
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (排序详解之 堆排序)
  • (三)elasticsearch 源码之启动流程分析
  • (十一)图像的罗伯特梯度锐化
  • (五)Python 垃圾回收机制
  • (一)基于IDEA的JAVA基础10
  • (一)认识微服务
  • (转)一些感悟
  • (转载)OpenStack Hacker养成指南
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net 后台导出excel ,word
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装