国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

PHP 排序算法之選擇排序

2020-03-22 16:21:26
字體:
供稿:網(wǎng)友
選擇排序 select sorting

● 選擇排序也是內(nèi)部排序

● 排序思想:

第一次先隨便選擇一個數(shù),就是在要排序的數(shù)組中選擇一個元素和數(shù)組的其它元素比較。然后比較交換位置得到最小值或者最大值,然后再次在剩下的數(shù)組中,選擇一個數(shù)和數(shù)組剩下的元素比較,最后得到第二個最小或最大的元素。依次類推

● 示意圖:

選擇排序一共有數(shù)組大小 - 1 輪排序;每一輪排序又是一個循環(huán);先假定當前的這個數(shù)組就是最小數(shù),然后和后面的元素依次比較,如果發(fā)現(xiàn)有比當前數(shù)更小的數(shù),就重新確定最小數(shù),并得到下標,當遍歷到數(shù)組的最后時,就得到本輪最小數(shù)和下標,交換

1. 假設有一個待排序的數(shù)組 [3, 1, 15, 5, 20]

2. 隨機選擇一個元素,假設第一個就是最小的元素,拿 3 和數(shù)組剩下的元素比較,第一輪排序后得到最小元素 1

<?php$arr = [3, 1, 15, 5, 20];$count = count($arr);//假設最小的元素就是第一個元素$minIndex = 0;$min = $arr[0];for ($j = $minIndex + 1; $j < $count; $j++) {    if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值        $min = $arr[$j];        $minIndex = $j;    }}$arr[$minIndex] = $arr[0];$arr[0] = $min;

3. 再次選擇一個假定最小值,與后面的元素一次比較,得到第二個最小值

<?php$arr = [1, 3, 15, 5, 20];$count = count($arr);//假設最小的元素就是第二個元素$minIndex = 1;//假設的最小元素的下表$min = $arr[1];//假定最小元素的值for ($j = $minIndex + 1; $j < $count; $j++) {    if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值        $min = $arr[$j];        $minIndex = $j;    }}if ($minIndex != 1) {    $arr[$minIndex] = $arr[1];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交換    $arr[1] = $min;//元素下標交換}

4. 以此類推,就可以使用雙重 for 循環(huán),得到選擇排序的算法如下:

  html' target='_blank'>public static function sortSelect(array $arr) :array    {        if (!is_array($arr)) {            return ['message' => '$arr不是一個數(shù)組'];        }        $count = count($arr);        if ($count <= 1) {            return $arr;        }        for ($i = 0; $i < $count; $i++) {            $minIndex = $i;            $min = $arr[$i];            for ($j = $i + 1; $j < $count; $j++) {                if ($min > $arr[$j]) {//選擇的假定最小元素大于后面的元素                    $min = $arr[$j];//把后面的最小元素賦值給假定的最小元素                    $minIndex = $j;//把后面最小元素的坐標賦值給假定的最小元素                }            }            if ($minIndex != $i) {//如果在這個位置,一開始的假定最小元素的坐標被替換了,說明假定最小元素不是最小元素,那么發(fā)生交換                $arr[$minIndex] = $arr[$i];//交換最小元素,把最小元素和假定元素做交換                $arr[$i] = $min;            }        }        return $arr;    }

● 完整代碼如下:

<?phpclass SelectSort{    public static function select(array $arr):array    {        $count = count($arr);        //假設最小的元素就是第二個元素        $minIndex = 0;//假設的最小元素的下表        $min = $arr[0];//假定最小元素的值        for ($j = $minIndex + 1; $j < $count; $j++) {            if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值                $min = $arr[$j];                $minIndex = $j;            }        }        if ($minIndex != 0) {            $arr[$minIndex] = $arr[0];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交換            $arr[0] = $min;//元素下標交換        }        var_dump($arr);        $minIndex = 1;//假設的最小元素的下表        $min = $arr[1];//假定最小元素的值        for ($j = $minIndex + 1; $j < $count; $j++) {            if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值                $min = $arr[$j];                $minIndex = $j;            }        }        if ($minIndex != 1) {            $arr[$minIndex] = $arr[1];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交換            $arr[1] = $min;//元素下標交換        }        var_dump($arr);        $minIndex = 2;//假設的最小元素的下表        $min = $arr[2];//假定最小元素的值        for ($j = $minIndex + 1; $j < $count; $j++) {            if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值                $min = $arr[$j];                $minIndex = $j;            }        }        if ($minIndex != 2) {            $arr[$minIndex] = $arr[2];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交換            $arr[2] = $min;//元素下標交換        }        var_dump($arr);        return $arr;    }    public static function sortSelect(array $arr) :array    {        if (!is_array($arr)) {            return ['message' => '$arr不是一個數(shù)組'];        }        $count = count($arr);        if ($count <= 1) {            return $arr;        }        for ($i = 0; $i < $count - 1; $i++) {            $minIndex = $i;            $min = $arr[$i];            for ($j = $i + 1; $j < $count; $j++) {                if ($min > $arr[$j]) {//選擇的假定最小元素大于后面的元素                    $min = $arr[$j];//把后面的最小元素賦值給假定的最小元素                    $minIndex = $j;//把后面最小元素的坐標賦值給假定的最小元素                }            }            if ($minIndex != $i) {//如果在這個位置,一開始的假定最小元素的坐標被替換了,說明假定最小元素不是最小元素,那么發(fā)生交換                $arr[$minIndex] = $arr[$i];//交換最小元素,把最小元素和假定元素做交換                $arr[$i] = $min;            }        }        return $arr;    }}$arr = [3, 1, 15, 5, 20];var_dump(SelectSort::sortSelect($arr));

以上就是PHP 排序算法之選擇排序的詳細內(nèi)容,更多請關注 其它相關文章!

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 奈曼旗| 天长市| 杨浦区| 井研县| 永德县| 新昌县| 稻城县| 青河县| 武乡县| 佳木斯市| 广安市| 东辽县| 慈溪市| 北辰区| 五大连池市| 会宁县| 康乐县| 峨眉山市| 古浪县| 平泉县| 阳西县| 沂水县| 阜新市| 青川县| 华池县| 大余县| 汝城县| 南充市| 平舆县| 沭阳县| 辽阳市| 肃宁县| 阿图什市| 外汇| 申扎县| 荣昌县| 西林县| 铁岭县| 鄂伦春自治旗| 昭通市| 都兰县|