這篇文章運用簡單易懂的例子給大家介紹PHP中選擇排序的應用,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
成都創新互聯是一家以重慶網站建設公司、網頁設計、品牌設計、軟件運維、seo優化、小程序App開發等移動開發為一體互聯網公司。已累計為成都社區文化墻等眾行業中小客戶提供優質的互聯網建站和軟件開發服務。
● 選擇排序也是內部排序
● 排序思想:
第一次先隨便選擇一個數,就是在要排序的數組中選擇一個元素和數組的其它元素比較。然后比較交換位置得到最小值或者最大值,然后再次在剩下的數組中,選擇一個數和數組剩下的元素比較,最后得到第二個最小或最大的元素。依次類推
● 示意圖:
選擇排序一共有數組大小 - 1 輪排序;每一輪排序又是一個循環;先假定當前的這個數組就是最小數,然后和后面的元素依次比較,如果發現有比當前數更小的數,就重新確定最小數,并得到下標,當遍歷到數組的最后時,就得到本輪最小數和下標,交換
1. 假設有一個待排序的數組 [3, 1, 15, 5, 20]
2. 隨機選擇一個元素,假設第一個就是最小的元素,拿 3 和數組剩下的元素比較,第一輪排序后得到最小元素 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 循環,得到選擇排序的算法如下:
public static function sortSelect(array $arr) :array { if (!is_array($arr)) { return ['message' => '$arr不是一個數組']; } $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) {//如果在這個位置,一開始的假定最小元素的坐標被替換了,說明假定最小元素不是最小元素,那么發生交換 $arr[$minIndex] = $arr[$i];//交換最小元素,把最小元素和假定元素做交換 $arr[$i] = $min; } } return $arr; }
● 完整代碼如下:
<?php class 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不是一個數組']; } $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) {//如果在這個位置,一開始的假定最小元素的坐標被替換了,說明假定最小元素不是最小元素,那么發生交換 $arr[$minIndex] = $arr[$i];//交換最小元素,把最小元素和假定元素做交換 $arr[$i] = $min; } } return $arr; } } $arr = [3, 1, 15, 5, 20]; var_dump(SelectSort::sortSelect($arr));
以上就是PHP中選擇排序的應用詳細內容,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎關注創新互聯行業資訊,感謝各位的閱讀。
網站標題:PHP中選擇排序的應用
鏈接分享:http://vcdvsql.cn/article38/jhgipp.html
成都網站建設公司_創新互聯,為您提供品牌網站建設、網站維護、網站排名、軟件開發、小程序開發、動態網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯