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 相关文章推荐
Prototype 学习 Prototype对象
Jul 12 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
Jun 12 Javascript
16个最流行的JavaScript框架[推荐]
May 29 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
Sep 19 Javascript
javascript 数字格式化输出的实现代码
Dec 10 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
Dec 22 Javascript
详解Python中logging日志模块在多进程环境下的使用
Dec 26 Javascript
ES6中Proxy代理用法实例浅析
Apr 06 Javascript
Angular 4.x 动态创建表单实例
Apr 25 Javascript
angularjs2中父子组件的数据传递的实例代码
Jul 05 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
Sep 20 Javascript
Vue实现push数组并删除的例子
Nov 01 Javascript
如何正确理解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.ini中文版
2006/10/09 PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
剖析 PHP 中的输出缓冲
2006/12/21 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
JS实现简单日历特效
2020/01/03 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
vue中路由跳转不计入history的操作
2020/09/21 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
深入理解python中的闭包和装饰器
2016/06/12 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
详解python中asyncio模块
2018/03/03 Python
python如何实现反向迭代
2018/03/20 Python
python实现树形打印目录结构
2018/03/29 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
详解python数据结构和算法
2019/04/18 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
会计助理的岗位职责
2013/11/29 职场文书
军训 自我鉴定
2014/02/03 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python