修煉內功---資料結構與演算法10---選擇排序
阿新 • • 發佈:2018-12-27
選擇排序演算法的實現思路有點類似插入排序
也分已排序區間和未排序區間
但是選擇排序每次會從未排序區間中找到最小的元素,將其放到已排序區間的末尾
<?php /** * 選擇排序演算法實現 */ function selection_sort($nums) { if (count($nums) <= 1) { return $nums; } for ($i = 0; $i < count($nums); $i++) { $min= $i; for ($j = $i + 1; $j < count($nums); $j++) { if ($nums[$j] < $nums[$min]) { $min = $j; } } if ($min != $i) { $temp = $nums[$i]; $nums[$i] = $nums[$min]; $nums[$min] = $temp; } } return $nums; } $nums = [4, 5, 6, 3, 2, 1]; $nums = selection_sort($nums); print_r($nums);
很顯然,選擇排序的時間複雜度也是 O(n^2)
由於不涉及額外的儲存空間,所以是原地排序
由於涉及非相鄰元素的位置交換,所以是不穩定的排序演算法
綜合比較前面介紹的三個排序演算法,時間複雜度都是一樣的,也都是原地排序,但是選擇排序是不穩定的排序演算法,此外,插入排序和氣泡排序相比較,我們在將插入排序的時候講到,插入排序只需要一條語句,而氣泡排序需要三條,在同等條件下,或者資料量很大的情況下,插入排序效能是要由於氣泡排序的,所以綜合比較下來,三者的優先順序是插入排序 > 氣泡排序 >> 選擇排序。但是三者的時間複雜度都是 O(n^2),資料量很大的情況下效能表現並不是很理想,那有沒有效能更好的排序演算法呢?當然有,我們明天來揭曉。