PHP排序演算法之選擇排序

2021-09-13 12:09:34 字數 1800 閱讀 6095

二、選擇排序

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

舉例說明: $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個位置,最後乙個位置也就確定了。

示例**:

選擇排序 實現思路 雙重迴圈完成,外層控制輪數,當前的最小值。內層 控制的比較次數

for ($i=0; $i < count($arr)-1; $i++)

}if($p != $i)

}var_dump($arr);

排序演算法 排序演算法之選擇排序

最近在學習排序演算法,就排序演算法中的四大經典排序 氣泡排序 快速排序 選擇排序 插入排序。會出一系列的講解排序演算法的部落格。今天繼快速排序之後整理一下選擇排序。選擇排序,就是從一列未排序的陣列中先選出最小 最大 的數,放在陣列的第一位,第一位原來的數字放在最小的原來的位置,再選出第二小的數,放在...

PHP 演算法01之選擇排序

選擇最小的元素由左到右依次交換順序即完成元素由小到大的排序。選擇排序重點在於選擇最小元素。以下是較為詳細的描述 首先,把所有的資料迴圈一遍找到最小的數,然後和第乙個數交換位置。然後從第二個數起,一直迴圈到最後乙個,找到最小的數和第二個交換。如此一直找到最後乙個。選擇排序每次迴圈都能排好乙個元素,因此...

排序演算法之選擇排序 選擇排序 堆排序

直接選擇排序 如下 下面 是一次迴圈同時挑選出最大和最小數,並將其與左右交換 選擇排序 void selectionsort int a,int len swap a min a left 如果最大數的下標在為left,證明要交換的最大數已經被 換到min小標所表示的位置,只需要將right和min...