排序演算法之插入排序

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

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

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

1

<?php

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

<?php

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 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...

排序演算法之插入排序

排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...

排序演算法之插入排序

本節主要分析插入排序演算法的直接插入排序和希爾 shell 排序 又稱縮小增量排序 1.直接插入排序 該排序是最簡單的排序方法,其基本思想是 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至i n為止,依次將r i 插入當前的有序區r 1....