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

首頁 > 學(xué)院 > 邏輯算法 > 正文

PHP 排序算法之選擇排序

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

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

● 排序思想:

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

● 示意圖:

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

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

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

<?php$arr = [3, 1, 15, 5, 20];$count = count($arr);//假設(shè)最小的元素就是第一個(gè)元素$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. 再次選擇一個(gè)假定最小值,與后面的元素一次比較,得到第二個(gè)最小值

<?php$arr = [1, 3, 15, 5, 20];$count = count($arr);//假設(shè)最小的元素就是第二個(gè)元素$minIndex = 1;//假設(shè)的最小元素的下表$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;//元素下標(biāo)交換}

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

  html' target='_blank'>public static function sortSelect(array $arr) :array    {        if (!is_array($arr)) {            return ['message' => '$arr不是一個(gè)數(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;//把后面最小元素的坐標(biāo)賦值給假定的最小元素                }            }            if ($minIndex != $i) {//如果在這個(gè)位置,一開始的假定最小元素的坐標(biāo)被替換了,說明假定最小元素不是最小元素,那么發(fā)生交換                $arr[$minIndex] = $arr[$i];//交換最小元素,把最小元素和假定元素做交換                $arr[$i] = $min;            }        }        return $arr;    }

● 完整代碼如下:

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

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

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久日韩在线 | 中文字幕在线观看91 | 369看片你懂的小视频在线观看 | 96视频在线免费观看 | 欧美成人性生活片 | 亚州综合网 | 久久美女免费视频 | 毛片免费视频观看 | 久久最新视频 | 麻豆19禁国产青草精品 | 精选久久 | 久草在线新时代视觉 | 夜间福利视频 | 4p嗯啊巨肉寝室调教男男视频 | 欧美成人一二三区 | 免费看毛片网站 | 欧美激情视频一区二区免费 | 天天碰天天操 | 精品国产一区二区三区久久久狼牙 | 欧美不卡 | 欧美成网站 | 特级黄色一级毛片 | 色交视频 | 精品一区二区久久久久久久网精 | 天天黄色片 | 8x成人在线电影 | 欧美成人一二三区 | 销魂美女一区二区 | 欧美国产一区二区三区激情无套 | 91精品国产乱码久久久久久久久 | 强伦女教师视频 | 九色激情网 | 久久最新免费视频 | 国产精品久久久久久久av | 久久精品资源 | 日韩视频一区二区三区四区 | 麻豆19禁国产青草精品 | 国产精品久久久久久久久粉嫩 | 成人三级视频在线观看 | 久久精品亚洲一区二区三区观看模式 | xnxx 美女19|