演算法圖解閱讀筆記-選擇排序
陣列與連結串列
- 陣列是連續記憶體的應用方式,它的特點就是所有的單元的記憶體地址都是連續的,當需要擴充套件而初始化的記憶體不足夠的時候,就需要重新申請記憶體。
- 連結串列是已上一個元素指向來完成儲存的,它在記憶體的儲存是分散的,無論是新增還是刪除較陣列的最大優勢就是都不需要整體動,只需要上一個元素的指向調整就好,缺點就是無法直接通過計算獲得某個元素,如果要在連結串列中查詢某一個元素,就需要遍歷整個連結串列(最差情況)
選擇排序
遍歷所有元素,挑出最小的元素放在結果集中並刪除該元素,直到要排序的資料集中沒有元素為止。
golang版本
package main import "fmt" func main() { info := []int{12, 3, 54, 6, 6777, 2342, 234, 55, 6, 6777, 34545,} for i := 0; i < len(info); i++ { for j := 0; j < len(info); j++ { if info[j] < info[i] { info[i],info[j] = info[j],info[i] } } } fmt.Println(info) }
php版本
$arr_info = array( 10, 5, 12, 5, 67, 8, 45, 3, 11, 66, 442, 2, 34, 2342 ); $result = array(); $find_arr = $arr_info; for ($i = 0; $i < sizeof($arr_info); $i++) { $tmp = 0; $smallest = $find_arr[0]; for ($j = 0; $j < sizeof($find_arr); $j++) { if ($smallest > $find_arr[$j]) { $smallest = $find_arr[$j]; $tmp = $j; } } $result[] = $smallest; unset($find_arr[$tmp]); $find_arr = array_values($find_arr); } var_export($result);
注意,提取函式時小心刪除元素之後,原陣列長度受影響,這裡使用find_arr設定為不斷縮小的結果集。