它是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。
其實這個我們並不陌生,舉乙個現實中的小例子,我們都打過撲克,拿到牌時,就需要對撲克進行抹順,一般都是按著左右是從小到大的順序,新來了一張牌,我們是不是一張一張的進行比較,找到它合適的位置,這就是插入排序。
$arr[$j] = $target; //迴圈完了,找到了目標數合適的位置,將目標數放到位置上
}}$arr = [12,56,98,32,16,34,2,9,1];
insertsort($arr);
dump($arr);
上面是相應的**,關鍵步驟上有標註。
①先將第乙個元素視為有序,第二個元素與第乙個元素比較,若比第乙個元素小,則插入到第乙個元素之前。第三個元素依次與第二個元素、第乙個元素比較(前三 個元素有序);第四個元素依次與第三個、第二個、第乙個元素比較,插入到合適位置以形成乙個有序表(即此時前四個元素有序)因此,直接插入排序演算法是逐步 地形成乙個有序序列的。也即在表的前頭形成乙個區域性有序序列。
②不論初始序列如何,總需要 n-1 趟排序,第一趟是第二個元素與第乙個元素比,第二趟是第三個元素與前二個元素比,第三趟是第四個元素與前三個元素比……
③當初始序列有序時,第一趟只需比較一次,第二趟只需比較一次,第三趟也只需比較一次……總共只需比較 n-1 次即可完成排序。當初始序列逆序時,第一趟比較一次,第二趟比較二次,……第 n-1 趟比較 n-1 次。總共比較 n(n-1)/2 次。
④直接插入排列是基於明確的相鄰位置的兩個元素的比較,因此該演算法是穩定的。排序過程的比較次數與待排序列的初始狀態有關。每進行一趟排列並不能唯一地確定下乙個元素的最終位置。
因此最好的情況是o(n),最壞的情況是o(n2) n的平方。
PHP實現插入排序
插入排序思想 插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in place排序 即只需用到o 1 的額外空間的排序 因而在從後向前掃瞄過程中,...
PHP如何實現插入排序?
插入排序是一種簡單的排序演算法,可以一次構建最終排序的陣列 或列表 與大多數高階演算法 如快速排序,堆疊或合併排序 相比,它在大型列表上的效率要低得多。php插入排序的 示例如下 function insertion sort my array my array j 1 val return my ...
插入排序之PHP實現
插入排序的 實現雖然沒有氣泡排序和選擇排序那麼簡單粗暴,但它的原理應該是最容易理解的了,因為只要打過撲克牌的人都應該能夠秒懂。插入排序是一種最簡單直觀的排序演算法,它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序和氣泡排序一樣,也有一種優化演算...