手机版

简单理解js冒泡排序

时间:2021-09-06 来源:互联网 编辑:宝哥软件园 浏览:

关于排序,其实不管是哪种语言,它都有内置的排序功能,想用的时候可以调用。既然这样,为什么还要谈这个事情呢?我觉得,其实我们多讲排序是因为算法对于计算机来说非常重要,一个好的算法可以让计算机的效率事半功倍。因此,算法是计算机语言中一门非常热门的课程,它所代表的计算机思维值得进一步研究。

我也知道博客公园里很多作者都写过文章详细解释我标题里的排序。或许,我觉得我的理解更能体现这种排序的工作原理。所以很惭愧在这里再写一篇关于冒泡排序的文章,有需要的读者可以看看。

在进入正题之前,我想介绍一下谷歌浏览器的一个有用的调试功能。如果你已经知道了,请跳过它。

首先,打开谷歌浏览器,输入我们的代码脚本:

右键单击并单击检查。

按顺序单击以获取脚本的运行代码:

我的脚本是bubble.html,它存储在www.test.com域名下的js/f目录中。每个人的脚本不一样,存储的目录也不一样。请根据自己的情况来。

调用脚本内容后,下面是调试代码。

选择断点后,在Google浏览器中再次运行脚本,即运行下面的www.test.com/js/f/bubble.html然后进入车内

再次运行后,您会看到如下内容:

看到上面那个蓝色的矩形框了吗?这个蓝色的矩形框是脚本运行的代码位置,那么如何才能让脚本代码一步一步的运行呢?

事实上,我之所以监视这个脚本的for循环代码的断点,是为了看看冒泡排序是如何循环运行的。对于初学者来说,直观地查看冒泡排序代码的运行情况,将有助于他们更好地理解算法的执行过程。

这里介绍一下这个小调试功能。让我们言归正传。如果你无法直接想象冒泡排序的实现,可以按照我上面的步骤调用谷歌的调试功能,直观的查看冒泡排序的全过程。

介绍两个变量相互交换的思路。我们使用中间变量来交换:

//interactive元素,这里的代码是从脚本中截取的,这么简单,应该不会影响对if(arr[j] arr[j 1])的理解{ mark=falsevar temp=arr[j];//temp是一个中间变量。要交换的第一个元素arr[j]被分配给中间变量,并且第一个元素也被存储为arr[j]=arr[j 1];//第二个元素赋给第一个元素,因为我们已经把第一个元素存储在中间变量中了,所以不用担心它的值会被arr[j ^ 1]=temp覆盖;//temp存储第一个元素的值,将其分配给第二个元素意味着将第一个元素分配给第二个元素。在这一步,两个元素交换了位置。}我们再来介绍一下冒泡排序的算法流程:

冒泡排序:通过比较相邻元素,交换位置,一步一步选择一个元素。

例如,对以下数组进行排序:

这是一个无序的数组:2,9,4,8,5,1,0,7,3,6

比较规则:大于

第一轮:

第一个比较:我们来比较一下2和9: 29?2和9之间的比较是错误的,所以让我们忽略它,继续前进。

第二个比较:比较9和4,94?如果是真的,那我们就让他们交换价值,交换价值,他们的地位不会变,是吗?上面已经提到了如何交换价值,这里就不再重复了。

经过这一次的值交换,原来的数组变成了:2,4,9,8,5,1,0,7,3,6

第三个比较:比较9和8,98?如果是真的,他们两个继续交换价值。这时,数组变成了:2,4,8,9,5,1,0,7,3,6

...

看到这里9的位置了吗?是在一步步后退吗?第一个比较,因为9本来就大,不应该和2换位置。因此,9没有放在前面。对于第二次比较,因为9比4大,根据比较规则,他们应该互换位置,也就是9向后移动一位。第三次比较,还是符合比较规则,所以9和8对换位置,9后移一步。

与上次相比:原数组的情况应该是2,4,8,5,1,0,7,3,6,9

经过第一轮比较,我们把最大的元素放在了后面,对吗?

接下来,第二轮:

首先,在第二轮中,原来的数组2、9、4、8、5、1、0、7、3、6变成了2、4、8、5、1、0、7、3、6、9。我们在已经冒泡过一次的数组的基础上进行比较,先确认一下这个哈哈。

当前数组:2,4,8,5,1,0,7,3,6,9

根据比较规则:24?是假的,不管它,继续比较前进。

48?是假的,不管它,继续比较前进。

85?是真的,两者交换价值,也就是交换位置。此时,数组:2,4,5,8,1,0,7,3,6,9

继续走,81号?这是真的。他们交换位置。此时数组:2,4,5,1,8,0,7,3,6,9

.

对比结束,原来的数组又变了,变成了:2,4,5,1,0,7,3,6,8,9

经过两轮对比,原来的阵列是不是变得有序了一点?呵呵,没什么不好。两轮过后,最后两位数字已经排好了。

既然后两个是两回合后的顺序,那十回合后呢?自己想象。

十回合后,数组肯定已经排序了。这就是气泡分选的工作过程。当相邻元素进行比较时,每个圆都会弹出一个有序的值。

那么,我们如何通过代码实现冒泡排序呢?

写到这里,我想每个人都应该知道怎么做。

我们使用两层嵌套for循环来实现这个过程,即冒泡排序:

//外部控制轮编号为(var I=0;伊琳;I ){//内层对数组元素进行冒泡选择(var j=0;jlen-1-I;J ){//交互元素if(arr[j]arr[j 1]){ vartemp=arr[j];arr[j]=arr[j 1];arr[j 1]=温度;}}}看到上面两个嵌套的循环了吗?我们用来控制比较回合数的外部for循环,

内部for循环用于控制每轮比较的次数。同时,在这个for循环中我们还应该做什么呢?你明白上面的叙述吗?在上面的叙述中,是不是每次比较都要按照比较规则来交换数组元素的位置,对吗?然后,程序的工作过程是一样的,我们要根据这里的比较规则来交换数组元素的位置,才能泡出我们需要的元素。

以下是气泡排序的完整代码。我优化了。当然,如果还能优化,还可以继续优化。

!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN ' ' http://www . w3 . org/TR/XHTML 1/DTD/XHTML L1-Transitional . DTD ' html xmlns=' http://www . w3 . org/1999/XHTML ' XML : lang=' zh-cn ' head meta http-equiv=' Content-Type ' Content=' text/html;charset=UTF-8 '/title bubble sort/title meta name=' keywords ' content=' keywords list '/meta name=' description ' content='网页描述'/linkrel='样式表' type=' text/Css ' href=' '/style type=' text/Css '/style script type=' text/JavaScript '/parameter number数组函数bubble(arr){ //检查参数if(toString.call(arr)!=='[对象数组]'){返回false}//获取数组长度var len=arr.length如果(len=1){//小于1,则不命令返回arr}//的外部控制轮数量(var I=0;伊琳;I ){ //标记是否有排序元素var mark=true//内层对数组元素进行冒泡选择(var j=0;jlen-1-I;J ){ //交互元素if(arr[j]arr[j 1]){ mark=false;var temp=arr[j];arr[j]=arr[j 1];arr[j 1]=温度;}} if(mark){ //当没有进行冒泡选择时,证明return arr已经排序;}}}//test var ar=[9,3,7,4,8,2,5,1,6,0];alert(气泡(ar));/script/head body/body/html下面简单介绍一下气泡排序的工作原理。如果有时间,我会详细讲解其他三种排序,即快速排序、选择性排序和插入排序。

其实这三种排序的工作原理和冒泡排序很像,网上文章也很多,可以自己研究。

以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望多多支持我们!

版权声明:简单理解js冒泡排序是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。