排序學習之 選擇排序

2021-09-07 20:05:46 字數 2737 閱讀 7333

php**如下

在一列數字中,選出最小數與第乙個位置的數交換。然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。(以下都是公升序排列,即從小到大排列)

舉例說明: $arr = array(6, 3, 8, 2, 9, 1);

第一輪:

第一次比較, 第乙個數 6 與(3,  8,  2,  9,  1)中 3 比較,6大,當前最小數為3,位置為 1

第二次比較, 最小數字 3 與(3,  8,  2,  9,  1)中 8 比較,3小,當前最小數為3,位置為 1

第三次比較, 最小數字 3 與(3,  8,  2,  9,  1)中 2 比較,3大,當前最小數為2,位置為 3

第四次比較, 最小數字 2 與(3,  8,  2,  9,  1)中 9 比較,2小,當前最小數為2,位置為 3

第五次比較, 最小數字 2 與(3,  8,  2,  9,  1)中 1 比較,2大,當前最小數為1,位置為 5

第一輪比較完成後,確定最小數為1,小於第乙個數6,交換位置上的數,交換後結果為 1  3  8  2  9  6

總結:第一輪比較,可以確定第乙個位置的最小值。

第二輪:

第一次比較, 3與(8, 2,  9,  6)中 8 比較,3小,當前最小數為3,位置為 1

第二次比較, 3與(8, 2,  9,  6)中 2 比較,3大,當前最小數為2,位置為 3

第三次比較, 2與(8, 2,  9,  6)中 9 比較,2小,當前最小數為2,位置為 3

第四次比較, 2與(8, 2,  9,  6)中 6 比較,2小,當前最小數為2,位置為 3

第二輪比較完成後,確定最小數為2,小於第二個數3,交換位置上的數,交換後結果為 1  2  8  3  9  6

總結:第二輪比較,可以確定第二個位置的最小值。至此確定了前兩個位置上的數。

第三輪:

第一次比較, 8與( 3,  9,  6)中 3 比較,8大,當前最小數為3,位置為3

第二次比較, 3與( 3,  9,  6)中 9 比較,3小,當前最小數為3,位置為3

第三次比較, 6與( 3,  9,  6)中 6 比較,3小,當前最小數為3,位置為3

第三輪比較完成後,確定最小數為3,小於第三個數8,交換位置上的數,交換後結果為 1  2  3  8  9  6

總結:第三輪比較,可以確定第三個位置的最小值。至此確定了前三個位置上的數。

第四輪:

第一次比較, 8與( 9,  6)中 9 比較,8小,當前最小數為8,位置為3

第二次比較, 8與( 9,  6)中 6 比較,8大,當前最小數為6,位置為5

第四輪比較完成後,確定最小數為6,小於第四個數8交換位置上的數,交換後結果為 1  2  3  6  9  8

總結:第四輪比較,可以確定第四個個位置的最小值。至此確定了前四個位置上的數。

第五輪:

第一次比較, 9與 8 比較,9大,當前最小數為8,位置為5

第五輪比較完成後,確定最小數為8,小於第五個數9,交換位置上的數,交換後結果為 1  2  3  6  8  9

總結:第五輪比較,可以確定第五個個位置的最小值。至此確定了前5個位置上的數。

綜合以上五輪比較,每一輪比較都可以確定乙個位置,對於n個數,比較n-1輪可以確定n個位置上的數,因為確定了n-1個位置,最後乙個位置也就確定了。**如下:

<?php/**

* created by phpstorm.

* user: brady

* date: 2018/10/10

* time: 10:22 */

error_reporting(e_all

);ini_set('display_errors', '1');/**

* @author brady

* @param $arr 待排序的陣列

* @param string $sort 排序順序 asc公升序 desc降序

* @time 2018/10/10

* 每一輪比較都可以確定乙個位置,對於n個數,比較n-1輪可以確定n個位置上的數,因為確定了n-1個位置,最後乙個位置也就確定了 */

function select_sort($arr,$sort='asc')

} else}}

//迴圈結束 交換$arr[$i]和最小位置的值 如果兩者位置不相等

echo "第".($i+1)."輪迴圈找到最小的值".$arr[$min_position]."和位置".$i."的".$arr[$i]."進行交換 交換前".json_encode($arr

);

if($i != $min_position

)

echo json_encode($arr). "";

}return

$arr;}

$arr = [8,7,4,5,6,3,2,1];

echo "排序前".json_encode($arr)."";

$res = select_sort($arr,'desc');

echo "排序後".json_encode($res);

排序之選擇排序

書接上文,下面是選擇排序。選擇排序是最容易想到也是最容易實現的排序方式。主要思想 n個元素的陣列,每次從原陣列中找到最小的乙個元素,將這個元素加入新陣列,再把這個元素從元陣列中刪除,就完成了一次選擇。經過n 1次選擇後原陣列中剩下乙個元素,就是最大的乙個元素,將他加入新陣列裡,就完成了選擇排序。這個...

排序之選擇排序

選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法。乙個長度為n的待排序列,先找出 0,n 1 區間內最小的數,放在第一位,再找出 2...

排序之選擇排序

二 選擇排序 1 選擇排序 區間在不斷地變小 基本思想 選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。首先,選出最小的數放在第一位,然後選擇第二小的數,放在...