php實現直接插入排序算法

此算法主要原理:每次把一個待排序的關鍵碼插入到已排好序的序列中。

排序過程:

1、整個序列分成有序區和無序區,初始化有序區為待排序記錄的第一個記錄,無序區為剩下的待排序記錄。
2、取無序區的第一個記錄插入到有序區的合適位置中。
3、重復以上操作直到無序區為空

下面我用具體的數組來演示一遍整體效果

假設有一組待排序數據:8、5、1、9、3
初始 [ 8 ] 5 1 9 3 <strong>中括號代表有序區</strong>

8 向 5 位置后移,5放在 8的前面
第一趟 排序 [ 5 8 ] 1 9 3

5 和 8 各后移一個位置 ,
第二趟排序 [ 1 5 8 ] 9 3

1、5 和 8 不移動,位置不變 ,9放在 8 后面
第三趟排序 [ 1 5 8 9 ] 3

5、8和 9各后移一個位置,1放在3 的前面
第四趟排序 [ 1 3 5 8 9 ]

得到最終結果 1 3 5 8 9

附上我的php代碼演示

<?php

  $data = array(
    1=>8,
    2=>5,
    3=>1,
    4=>9,
    5=>3
  ); 
  
  $lenth = count($data);
  for($i=2; $i<=$lenth; $i++){
     $data[0] = $data[$i];
     for($j=$i-1; $data[0]<$data[$j]; $j--){
        $data[$j+1] = $data[$j];
     }
     $data[$j+1] = $data[0];
  }
  unset($data[0]);
  echo "<pre>";print_r($data);die;
?>

以上 使用 $data[0] 是為了防止 數組越界報錯使用的,并且充當哨兵的作用。

運行輸出如下

Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Ba la la la ~ 讀者朋友們,你們好啊,又到了冷鋒時間,話不多說,發車! 1.冒泡排序(Bub...
    王飽飽閱讀 1,815評論 0 7
  • 概述:排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,743評論 0 15
  • 概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    蟻前閱讀 5,220評論 0 52
  • 某次二面時,面試官問起Js排序問題,吾絞盡腦汁回答了幾種,深感算法有很大的問題,所以總計一下! 排序算法說明 (1...
    流浪的先知閱讀 1,208評論 0 4
  • 排序的基本概念 在計算機程序開發過程中,經常需要一組數據元素(或記錄)按某個關鍵字進行排序,排序完成的序列可用于快...
    Jack921閱讀 1,459評論 1 4