JavaScript算法学习之冒泡排序和选择排序


Posted in Javascript onNovember 02, 2019

前言

算法与数据结构构成了程序,数据结构用于实现数据的表示、存储、管理,算法通过使用数据完成一定的业务逻辑与操作,最终实现了程序的功能。因此算法在编程中的重要性是不言而喻的。很多复杂的算法都是借助最基本的算法实现的。本文主要选取经典排序算法中的冒泡排序与选择排序对JavaScript编程实现算法进行简单描述与说明。

JavaScript算法学习之冒泡排序和选择排序

程序算法

算法说明

算法(Algorithm)是解决问题的一种策略机制,算法也是有限操作指令的集合。按照算法策略输入符合要求的数据,最终获得解决问题的输出结果。冒泡算法与选择算法主要用于实现对无序的数字集合进行排序。算法描述分别如下:

1、冒泡排序算法

冒泡算法顾名思义,可以将待排序序列中的每一个元素看成一个个气泡,假设气泡的大小用元素的数值表示,这样的话最大气泡(最大的元素数字)会最先升起来,这一过程即为冒泡。冒泡算法的关键在于将未排序部分最大元素依次后移动,在序列尾端从小到大形成排序好的有序序列。冒泡排序示意如下图所示:

JavaScript算法学习之冒泡排序和选择排序

冒泡排序算法示意图

冒泡排序算法示意图如上图所示,其中每一行表示一次排序,排序目的找到最大值,从待排序序列中取出最大值,放到红色小球区域中,红色小球区域表示已完成排序的序列。通过上图我们可以看出,每趟排序冒泡出来的元素分别为(17,12,9,5,1)。最终排好的序列为(1,5,9,12,17)。

2、选择排序算法

选择排序是指从未排序的序列中找到最小的值并取出放到已经排好顺序的序列中,一直到未排序序列中的元素个数为零。即所有的元素都放到已经排好顺序的序列中。该算法的关键在于从未排序的序列中找到最轻(数值最小)元素,放到已经排序好的序列中。选择排序算法示意如下图所示:

JavaScript算法学习之冒泡排序和选择排序
选择排序示意图

选择排序示意图如上图所示,选择的关键在于找到最小的值,并将其放到已经排序好的序列中。上图中未排序(待排序)集合为黄色部分,排序好的部分为绿色背景部分,每一行为一次排序,排序目的找到最小元素。通过上图可知选择出来的最小值依次为(1,5,9,12,17)。

冒泡排序实现

JavaScript冒泡排序主要借助JavaScript array数字对象实现待排序序列的存储,通过循环语句遍历数组,从待排序序列的第一个元素开始与后面元素比较,如大于后面元素则交换,因此经过一趟遍历,最大元素将会跑到array数组的末尾。实现代码描述如下:

var arr1=[9,1,4,13,7,8,20,23,15]; 
 var wlen1=arr1.length;
 var count1=0;//记录总执行次数 
 for(var i=0;i<arr1.length-1;i++) { 
 for(var j=0;j<wlen1;j++) { 
 if(arr1[j]>arr1[j+1]) { 
 var temp; 
 temp=arr1[j]; 
 arr1[j]=arr1[j+1]; 
 arr1[j+1]=temp; 
 count1++; 
 } 
 } 
 wlen1=wlen1-1; 
 }

选择排序实现

按照算法描述选择排序需要使用两个JavaScript数组对象,一个为待排序序列存储数据,一个为排序完成数组。分别从待排序序列数组中找到最小值并取出存储到完成排序数组中。arr数组为待排序数组,res数组为排序完成数组。使用javaScript实现选择排序代码描述如下:

var arr=[9,1,4,13,7,8,20,23,15]; 
 var wlen=arr.length; 
 var count=0;//记录已完成排序元素数量 
 var res=[];//最终排序结果数组 
 var minvalue=0; //思路从未排序序列选择最小元素放到已经完成排序的数组中 
 for(var i=0;i<wlen;i++) { //找到最小元素 
 minvalue=arr[0]; 
 for(var j=0;j<arr.length;j++) { 
 if(minvalue>arr[j]) { 
 minvalue=arr[j]; 
 var temp; 
 temp=arr[0]; 
 arr[0]=arr[j]; 
 arr[j]=temp; 
 } 
 count++; 
 } 
 arr.shift(); 
 res[i]=minvalue; 
 }

JavaScript实现基本冒泡与选择排序算法描述如上所示,本例设计测试用例为(9,1,4,13,7,8,20,23,15),该待排序测试用例分别执行冒泡排序与选择排序,效果展示如下图

JavaScript算法学习之冒泡排序和选择排序

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
Dec 27 Javascript
浅析js设置控件的readonly与enabled属性问题
Dec 25 Javascript
jQuery的animate函数学习记录
Aug 08 Javascript
AngularJS基础 ng-model 指令详解及示例代码
Aug 02 Javascript
详解vue+vueRouter+webpack的简单实例
Jun 17 Javascript
EasyUI在Panel上动态添加LinkButton按钮
Aug 11 Javascript
js+SVG实现动态时钟效果
Jul 14 Javascript
微信小程序页面间传值与页面取值操作实例分析
Apr 30 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
May 10 Javascript
Node配合WebSocket做多文件下载以及进度回传
Nov 07 Javascript
微信小程序实现时间进度条功能
Nov 17 Javascript
vue项目多环境配置(.env)的实现
Jul 21 Vue.js
如何正确理解vue中的key详解
Nov 02 #Javascript
Javascript 关于基本类型和引用类型的个人理解
Nov 01 #Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
Nov 01 #Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
Nov 01 #Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
Nov 01 #Javascript
vue实现点击追加选中样式效果
Nov 01 #Javascript
vue 导航内容设置选中状态样式的例子
Nov 01 #Javascript
You might like
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
php获取excel文件数据
2017/04/21 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
2017/09/05 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
vuex actions传递多参数的处理方法
2018/09/18 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
python多线程方式执行多个bat代码
2016/06/07 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
python 动态绘制爱心的示例
2020/09/27 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
SQL数据库笔试题
2016/03/08 面试题
拉丁舞学习者的自我评价
2013/10/27 职场文书
党员培训思想汇报
2014/01/07 职场文书
国旗下的演讲稿
2014/05/08 职场文书
企业理念标语
2014/06/09 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书