php實現插入排序

來源:互聯網
上載者:User
1.插入排序的概念

它是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。

其實這個我們並不陌生,舉一個現實中的小例子,我們都打過撲克,拿到牌時,就需要對撲克進行抹順,一般都是按著左右是從小到大的順序,新來了一張牌,我們是不是一張一張的進行比較,找到它合適的位置,這就是插入排序。


2.代碼實現

function InsertSort(&$arr){ //這個是取數組的地址,這樣這個數組的值也能改變    for ($i=1;$i<count($arr);$i++) {    //從1開始,因為第0個是有序的        $target = $arr[$i]; //將目標數用一個變數儲存起來        $j = $i;        while ($j>0 && $target < $arr[$j-1]) {  //從目標數的前一個開始向前迴圈,當前數比目標數小,就將當前數向前挪一個,騰出一個位置            $arr[$j] = $arr[$j-1];            $j--;        }        $arr[$j] = $target; //迴圈完了,找到了目標數合適的位置,將目標數放到位置上    }}$arr = [12,56,98,32,16,34,2,9,1];InsertSort($arr);dump($arr);

上面是相應的代碼,關鍵步驟上有標註。 3.複雜度分析

①先將第一個元素視為有序,第二個元素與第一個元素比較,若比第一個元素小,則插入到第一個元素之前。第三個元素依次與第二個元素、第一個元素比較(前三 個元素有序);第四個元素依次與第三個、第二個、第一個元素比較,插入到合適位置以形成一個有序表(即此時前四個元素有序)因此,直接插入排序演算法是逐步 地形成一個有序序列的。也即在表的前頭形成一個局部有序序列。
②不論初始序列如何,總需要 N-1 趟排序,第一趟是第二個元素與第一個元素比,第二趟是第三個元素與前二個元素比,第三趟是第四個元素與前三個元素比……
③當初始序列有序時,第一趟只需比較一次,第二趟只需比較一次,第三趟也只需比較一次……總共只需比較 N-1 次即可完成排序。當初始序列逆序時,第一趟比較一次,第二趟比較二次,……第 N-1 趟比較 N-1 次。總共比較 n(n-1)/2 次。
④直接插入排列是基於明確的相鄰位置的兩個元素的比較,因此該演算法是穩定的。排序過程的比較次數與待排序列的初始狀態有關。每進行一趟排列並不能唯一地確定下一個元素的最終位置。

因此最好的情況是O(n),最壞的情況是O(n2) n的平方。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.