排序演算法之插入排序

2022-01-19 10:39:53 字數 1133 閱讀 2431

插入排序一般分為直接插入排序和二分插入插入排序。

直接插入排序又可以分為前插和後插,不過雖然是這樣分,只是尋找地點的方向不一樣而已。“前插”就是從頭開始找合適的位置,“後插”就是從後面開始找合適的位置。這裡我們只討論“後插”。直接插入排序的思想很簡單,開始時,整個陣列都是無序的,預設第一個數是排好序的,然後要把第二個數插入到前面,那麼就要找到合適的位置插入,從當前數的前一個數$a與當前數$s進行比較,如果此時$a<$s,那麼就把$s插入到$a的後面,否則$s就與$a前面的數$b進行比較,或者$a已經是第一個數了就停止,把$s插入到陣列的第一個位置。現在前兩個數已經是有序的了, 然後就是插入第三個數,步驟是一樣的。一個關鍵性的問題就是,迴圈停止的位置是要插入的位置的前一個,也就是說,應該從這個位置的後一個向後移動,騰出那個合適的位置。騰位置時應該是前一個數覆蓋後一個數,所有for迴圈應該從後向前開始。

1

2function insertsort(&$a

)else12}

13//

儲存當前資料

14$s = $a[$i

];15

//將資料向後移動

16for($k=$i; $k>$j+1; $k--)

19//

將當前的資料放在找到的位置

20$a[$j+1] = $s;21

}22}23 ?>

還有就是二分插入排序,二分插入排序只不過查詢的方式不同而已。每次要插入的值$a[$i]總是與前面已排好序的中間的值$a[$mid]進行比較,如果$a[$i]比較小則在前面的區間繼續二分查詢,否則在後面的區間。

1

2function binarysort(&$a

)else

if($a[$mid] < $a[$i

])else17}

18//

儲存當前資料

19$s = $a[$i

];20

//將資料向後移動

21for($k=$i; $k>=$left; $k--)

24//

將當前的資料放在找到的位置

25$a[$left] = $s;26

}27}28 ?>

插入排序也是一種簡單的排序方式。

排序演算法 插入排序

要點 基本思想 就是把一個新的元素插入已排好序的陣列形成一個新的已排好序的陣列 比方說 有一個陣列是 1 3 4 6 8 現在要將 2 插入...

排序演算法之直接插入排序

直接插入排序定義 每次從無序表中取出第一個元素,把它插入到有序表的合適位置,使有序表仍然有序。直接插入排序屬於穩定的排序,最壞時間複雜性為o...

插入排序 直接插入排序 希爾排序

1 直接插入排序 兩個陣列,有序陣列和無序陣列。 排序前 無序陣列裡面所有的值都是無序的,有序陣列沒有值 排序中 無序陣列中拿出一個數,放到...