插入排序——直接插入排序(StraightInsertionSort)
阿新 • • 發佈:2018-11-08
原理
從第一個元素開始,該元素可以認為已經被排序
取出下一個元素,在已經排序的元素序列中從後向前掃描
如果該元素(已排序)大於新元素,將該元素移到下一位置
重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
將新元素插入到該位置後
重複步驟2~5
<?php /** * 直接插入排序 * 資料結構----------------陣列 * 最差時間複雜度-----------O(n^2):輸入序列是降序排列的 * 最優時間複雜度-----------O(n):輸入序列是升序排列的 * 平均時間複雜度-----------O(n^2) * 空間複雜度--------------O(1) * 穩定性-----------------穩定 */ $arr = [1, 3, 34, 2, 32, 2, 78, -43, 53, -35, 0]; function StraightInsertionSort($arr) { // 陣列第一個元素預設已被排序 for ($i = 1; $i < count($arr); $i++) { // 未排序序列從陣列第二個元素開始 $get = $arr[$i]; // 獲取未排列序列第一個元素為要比較的元素 $j = $i - 1; // 指標指向已排序序列最後一個元素 while ($j >= 0 && $arr[$j] > $get) { // 當指標指向的元素比要比較的元素大 $arr[$j + 1] = $arr[$j]; // 則將指標指向的元素向後移動一位 $j--; // 指標前移 } $arr[$j + 1] = $get; // 直到指標指向的元素與要比較元素小或者相等,則要比較元素插入到指標指向元素後 } return $arr; } print_r(StraightInsertionSort($arr));