php實現希爾排序

2021-07-24 20:30:41 字數 1131 閱讀 2379

對於排序的演算法我想大家首先想到的事  氣泡排序;快速排序;或者想起選擇和插入排序;

今天的講解並不是以上四種;而是希爾排序;

對18w個數字排序,時間比較(毫秒) 希爾排序 0.1s 就完成了,有點不敢相信,插入排序用了4.2s

理解這些複雜的排序演算法還是很有意思的,體會這些排序演算法的精妙~

一、希爾排序(shell sort):希爾排序是基於插入排序的,區別在於插入排序是相鄰的乙個個比較(類似於希爾中h=1的情形),而希爾排序是距離h的比較和替換。

希爾排序中乙個常數因子n,原陣列被分成各個小組,每個小組由h個元素組成,很可能會有多餘的元素。當然每次迴圈的時候,h也是遞減的(h=h/n)。第一次迴圈就是從下標為h開始。希爾排序的乙個思想就是,分成小組去排序。

理解這些演算法,最好是有個圖示。就先來**吧。

<?php 

/** * 希爾排序

*/function shell_sort(array $arr)

while ($h >= 1)

//print_r($arr);echo '

'; // 開啟這行注釋,可以看到每一步被替換的情形}}

$h = intval($h/$f);

}return $arr;

}$arr = array(14, 9, 1, 4, 6, -3, 2, 99, 13, 20, 17, 15, 3);

$shell = shell_sort($arr);

echo '';

print_r($shell);

/** *

array

([0] => -3

[1] => 1

[2] => 2

[3] => 3

[4] => 4

[5] => 6

[6] => 9

[7] => 13

[8] => 14

[9] => 15

[10] => 17

[11] => 20

[12] => 99))

* */

?>

希爾排序實現

希爾排序算是插入排序的一種高階進化版,雖然希爾排序的實現比較簡單,但是它的原理證明非常複雜,由於能力有限,故沒有涉及。我直接上 吧。include intcontainer 1000001 int main void int increment,temp for increment n 2 incr...

PHP 排序演算法(五) 希爾排序

希爾排序 希爾排序又稱縮小增量排序,是指將無序序列,按照增量的不同大小,分成若干個序列,然後對子序列進行插入排序,本質上就是插入排序。思路 我們先確定增量,一般初始增量我們都設定為陣列長度的一半 向下取整 我們根據增量,將陣列分成了若干個子串行 分別對這四個子串行進行插入排序 然後再一次遍歷,增量設...

希爾排序C 實現

shell sort 希爾排序是一種對直接插入排序的改進方法,使用直接插入排序對於乙個基本有序的數列進行排序時,內部迴圈的次數會明顯減少,因此可以減小時間複雜度 希爾排序就是先使數列基本有序,然後再直接插入排序,減小插入排序的時間複雜度 希爾排序首先按一定增量進行插入排序,再逐步縮減增量,當這一增量...