麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 邏輯算法 > 正文

PHP 排序算法原理及總結

2020-03-22 16:54:34
字體:
來源:轉載
供稿:網友
冒泡排序原理

原理描述:

一次比較倆個相鄰的元素,大的元素后移,小的元素前移(交換位置)。直到找出最大的元素。就像是氣泡一樣,大的向下沉,小的向上冒。

流程:

有一個無序數組 $arr = [8, 9, 3, 6, 1, 4]

第一次外循環 :找出最大值 9,要倆倆相比,比 5 次。8 9 3 6 1 4 第一次, 8 跟 9 比,9 大,所以沒有交換位置。8 3 9 6 1 4 第二次, 9 跟 3 比, 9 大,交換位置。8 3 6 9 1 4 第三次, 9 跟 6 比, 9 大,交換位置。8 3 6 1 9 4 第四次, 9 跟 1 比, 9 大,交換位置。8 3 6 1 4 9 第五次, 9 跟 4 比, 9 大,交換位置。第二次外循環:找出第二大值 8,要倆倆相比,比 4 次。因為上一步已經找到最大值了。3 8 6 1 4 9 第一次,8 跟 3 比,8 大, 交換位置。3 6 8 1 4 9 第二次,8 跟 6 比,8 大, 交換位置。3 6 1 8 4 9 第三次,8 跟 1 比,8 大, 交換位置。3 6 1 4 8 9 第四次,8 跟 4 比,8 大, 交換位置。第三次外循環:找出第三大的值 6,要倆倆相比,比三次。3 6 1 4 8 9 第一次,3 跟 6 比,6 大,位置沒有變化。3 1 6 4 8 9 第二次,6 跟 1 比,6 大,交換位置。3 1 4 6 8 9 第三次,6 跟 4 比,6 大,交換位置。第四次外循環:找出第四大的值 4,要倆倆相比,比 2 次。1 3 4 6 8 9 第一次, 3 跟 1 比, 3 大,交換位置。1 3 4 6 8 9 第二次, 3 跟 4 比, 4 大,位置不變。第五次外循環:找出第五大的值 3, 比一次就夠了。1 3 4 6 8 9 比一次。1 跟 3 比,3 大,位置沒有變化。

總結:

1. 外層循環要元素數 - 1次。負責找出最大值。

2. 內層循環逐層遞減一次。負責倆倆相比較,交換元素位置。

代碼:

<?php        function bubbleSort($arr)         {            $len = count($arr);//獲取元素個數            for ($i = 0; $i < $len - 1; $i ++) {//找出最大值                $flag = 0;//做一個標記                for($j = 0; $j < $len - 1 - $i; $j++) {//倆倆相比較,交換位置                    if ($arr[$j] > $arr[$j + 1]) {                        //$temp = $arr[$j];//存當前元素                        //$arr[$j] = $arr[$j + 1];//把當前元素的值換成下一個元素的值                        //$arr[$j + 1] = $temp;//把下一個元素的值換成上一個元素的值。                        list($arr[$j], $arr[$j + 1]) = [$arr[$j + 1], $arr[$j]];//來自lovecn的評論,有時候思維有些固化。                        $flag = 1;//交換位置就記錄。                    }                }                if ($flag == 0) {//沒有發生交換位置,說明排序已經完成。可以推出循環。                    break;                }            }            return $arr;        }

快速排序原理(遞歸)

原理描述:

從數組中取第一個值作為參照物,比這個值小的放在左邊,比這個值大的放在右邊,這樣就會有倆個新的數組,遞歸處理倆個數組,然后左邊,參照物,右邊合并。注意:有遞歸就要找到遞歸出口,不然就會一直遞歸下去。

流程:

用文字敘述流程太麻煩,就從網上找了一個圖片,過程很清晰。

d3b5dd2e9cba2e19064e7d54ab9d844.png

代碼:

    <?php        function quickSort($arr)        {            $len = count($arr);            //遞歸出口            if($len <= 1) {                return $arr;            }            $markValue = $arr[0];//參照物。            $left = $right = [];//定義左邊和右邊。            for($i = 1; $i < $len; $i++) {//從1開始循環,因為第一個元素當作參照物。                if($arr[$i] > $markValue) {//大于參照物的放在右邊。                    $right[] = $arr[$i];                } else {//小于和等于參照物的元素都放進左邊,這樣會避免如果數組有重復元素時,會漏掉元素。                    $left[] = $arr[$i];                }            }            return array_merge(quickSort($left), [$markValue], quickSort($right));        }

插入排序

原理描述:

將要排序的數組分成倆個部分,取數組第一個元素放有序集合中,剩下的放到無序集合中。將需要排序的數,與前面已經排好序的數據從后往前進行比較,直到找到小于或者等于它的數,使其插入到相應的位置。

我的記憶方法:

假設有倆個箱子,第一個箱子是透明并且是空的,要用來裝有序元素,第二個箱子是不透明并且是滿的,裝無序元素。(其實裝什么都行,你喜歡的讓你容易記住的最好)。

1.第一步:在不透明箱子里隨便拿一個元素,直接扔到透明的箱子里
2.第二步:再從不透明的箱子里拿出一個元素,放進透明箱子里前,做比較。如果大就放后面,如果小就放前面。
3.重復第二步,但是我們每次需要比較的次數增加了,因為透明箱子里元素多了,直到找到合適的位置。

流程:

1.gif

<?php    function insertSort($arr)    {        $len = count($arr);        if ($len <= 1) {//一個元素或者沒有元素,排序無意義。            return $arr;        }        for($i = 0; $i < $len - 1; $i++) {            for($j = $i + 1; $j > 0; $j--){//每次比較次數增加。因為有序集合元素在增加。                if ($arr[$j] < $arr[$j - 1]) {                    list($arr[$j], $arr[$j - 1]) = [$arr[$j - 1], $arr[$j]];//交換位置。                }            }        }        return $arr;    }

選擇排序

原理描述:

每次一次從數組中取出最小元素或者最大元素,放到指定位置。

第一步:給第一個元素一個圣火令,和后面到每個元素比較,(我是取最小元素)。遇到比它小到元素就把這個圣火令給它,知道把圣火令交給最小元素手里。

第二步:交換位置,圣火令交給第二哥元素,重復第一步。

流程:

2.gif

<?php    function selectSort($arr)    {        $len = count($arr);        if ($len <= 1) {//一個元素或者沒有元素,排序沒有意義。            return $arr;        }        for($i = 0; $i < $len - 1; $i++) {            $p = $i;//給第一個元素圣火令。            for($j =  $i + 1; $j < $len; $j++) {                if ($arr[$j] < $arr[$p]) {//有圣火令的元素和后面的元素比較,把圣火令交給較小的元素。                    $p = $j;                }            }            list($arr[$p], $arr[$i]) = [$arr[$i], $arr[p]];        }        return $arr;    }

以上就是PHP 排序算法原理及總結的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 视频一区二区三区视频 | 港台三级在线观看 | 在线观看免费视频麻豆 | 国产精品99一区二区 | 92看片淫黄大片欧美看国产片 | 色av成人天堂桃色av | 91精品国产综合久久婷婷香 | 欧美三级短视频 | 福利在线播放 | 99国产精品国产免费观看 | 久久蜜桃精品一区二区三区综合网 | 一级黄色在线免费观看 | 人禽l交免费视频观看 视频 | 欧美中文字幕一区二区三区亚洲 | 蜜桃av鲁一鲁一鲁一鲁 | 在线中文日韩 | 性少妇chinesevideo | 成人在线视频播放 | 国产亚洲精品久久久久久久久久 | 精品久久久久久久久久久久久 | 黄色毛片a级 | 一级电影在线观看 | 黄色大片高清 | 国产视频在线一区 | 操碰在线视频 | 草草视频免费 | 久色婷婷| 高清视频一区二区 | 黄色av免费 | 久久亚洲国产精品 | 午夜精品久久久久久久99热浪潮 | 一级黄色大片在线观看 | 国产精品久久久久久久久久久久久久久久 | 亚洲一区免费观看 | 国产精品视频一区二区噜噜 | 91社| 午夜视频久久 | 中国产一级毛片 | 草操影院| 深夜福利视频免费观看 | 欧美18—19sex性护士中国 |