加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP排序算法之冒泡排序(Bubble Sort)实现方法详解

发布时间:2021-05-23 01:50:24 所属栏目:编程 来源:网络整理
导读:本篇章节讲授PHP排序算法之冒泡排序(Bubble Sort)实现要领。供各人参考研究详细如下: 根基头脑: 冒泡排序是一种互换排序,它的根基头脑是:两两较量相邻记录的要害字,假如反序则互换,直到没有反序的记录为止。 最简朴排序实现: 我们先来看看

本篇章节讲授PHP排序算法之冒泡排序(Bubble Sort)实现要领。分享给各人供各人参考,详细如下:

根基头脑:

冒泡排序是一种互换排序,它的根基头脑是:两两较量相邻记录的要害字,假如反序则互换,直到没有反序的记录为止。

最简朴排序实现:

我们先来看看在没有进修各类排序要领前常常行使的排序要领(至少我是这样。。。。):

$arr[$j]){ $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; } } } } $arr = array(9,1,5,8,3,7,4,6,2); MySort($arr); print_r($arr);

上面的这段代码严酷意义上说,不算是尺度的冒泡排序,由于它不满意“两两较量相邻记录”的冒泡排序头脑,它仅仅是一个简朴的互换排序。思绪不外是:从第一个要害字开始,将每一位要害字与它后头的全部要害字对较量,互换获得个中的最小值。但这个算法长短常低效的。

冒泡排序算法:

它一再地走访过要排序的数列,一次较量两个元素,假如他们的次序错误就把他们互换过来。走访数列的事变是一再地举办直到没有再必要互换,也就是说该数列已经排序完成。

这个算法的名字由来是由于数组中越大的元素会因为一次次排序后逐渐“沉”到数组的后头,而越小的元素会逐渐“浮”到数组的前面,故名。

冒泡排序算法的运作如下:(从后往前)

1.较量相邻的元素。假如第一个比第二个大,就互换他们两个。 2.对每一对相邻元素作同样的事变,从开始第一对到末了的最后一对。在这一点,最后的元素应该会是最大的数。 3.针对全部的元素一再以上的步调,除了最后一个。 4.一连每次对越来越少的元素一再上面的步调,直到没有任何一对数字必要较量。

看笔墨描写不必然看得懂,看代码吧:

= $i;$j --){ //两两较量相邻记录 if($arr[$j] > $arr[$j + 1]){ swap($arr,$j,$j+1); } } } }

冒泡排序算法改造:

《》公然是本好书,还给我们先容了冒泡排序算法的改造,这里我就直接搬它的告诉:

上面的冒泡排序算法是否还可以优化呢?谜底是必定的。试想一下,假如我们待排序的序列是{2,9},也就是说,除了第一和第二个要害字必要互换外,此外都已经是正常的次序了。当 i = 0 时,互换了 2 和 1 ,此时的序列已经是有序的了,可是算法如故不依不挠地将 i = 2 到 9 以及每个轮回中的 j 轮回都执行了一遍,尽量并没有互换数据,可是之后的大量较量照旧大大地多余了。 当 i = 2 时,我们已经对 9 与 8,8 与 7,·······,3 与 2 做了较量,没有任何数据互换,这就声名此序列已经有序,不必要再继承后头的循判定事变了(后头的事变也是不会产生任何数据互换,再做也是没故意义了)。为了实现这个设法,我们必要改造一下代码,增进一个标志变量 flag 来实现这一算法的改造:

= $i;$j --){ if($arr[$j] > $arr[$j + 1]){ swap($arr,$j+1); $flag = TRUE; } } } }

代码窜改的要害就是在 i 变量的for轮回中,增进了对flag是否为 true 的判定,颠末这样的改造,冒泡排序在机能上就有了一些晋升,可以停止因已经有序的环境下的有时义轮回判定。

冒泡算法总的时刻伟大度是

冒泡排序是不变排序。

本文参考自《》,在此仅作记录,利便往后查阅,大神勿喷!

PS:这里再为各人保举一款关于排序的演示器材供各人参考:

在线动画演示插入/选择/冒泡/合并/希尔/快速排序算法进程器材:

更多关于PHP相干内容感乐趣的读者可查察本站专题:《》、《》、《》、《》、《》、《》及《》

但愿本文所述对各人PHP措施计划有所辅佐。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读