麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 邏輯算法 > 正文

PHP排序算法之希爾排序(Shell Sort)

2020-03-22 18:44:46
字體:
供稿:網(wǎng)友
這篇文章主要介紹了PHP排序算法之希爾排序(Shell Sort),結(jié)合實(shí)例形式較為詳細(xì)的分析了希爾排序的原理、實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了PHP排序算法之希爾排序(Shell Sort)。分享給大家供大家參考,具體如下:

基本思想:

希爾排序是指記錄按下標(biāo)的一定增量分組,對每一組使用 直接插入排序 ,隨著增量逐漸減少,每組包含的關(guān)鍵字越來越多,當(dāng)增量減少至 1 時(shí),整個(gè)序列恰好被分成一組,算法便終止。

操作步驟:

先取一個(gè)小于 n(序列記錄個(gè)數(shù)) 的整數(shù) d1 作為第一個(gè)增量,把文件的全部記錄分組。所有距離為 d1 的倍數(shù)的記錄放在同一個(gè)組中。先在各組內(nèi)進(jìn)行 直接插入排序;然后,取第二個(gè)增量 d2 < d1 重復(fù)上述的分組和排序,直至所取的增量 dt=1( dt < d(t-1) …< d2 < d1),即所有記錄放在同一組中進(jìn)行 直接插入排序 為止.

該方法實(shí)質(zhì)上是一種分組插入方法

比較相隔較遠(yuǎn)距離(稱為增量)的數(shù),使得數(shù)移動(dòng)時(shí)能跨過多個(gè)元素,則進(jìn)行一次比[2] 較就可能消除多個(gè)元素交換。D.L.shell于1959年在以他名字命名的排序算法中實(shí)現(xiàn)了這一思想。算法先將要排序的一組數(shù)按某個(gè)增量d分成若干組,每組中記錄的下標(biāo)相差d.對每組中全部元素進(jìn)行排序,然后再用一個(gè)較小的增量對它進(jìn)行,在每組中再進(jìn)行排序。當(dāng)增量減到1時(shí),整個(gè)要排序的數(shù)被分成一組,排序完成。

一般的初次取序列的一半為增量,以后每次減半,直到增量為1。

關(guān)于增量的取法,據(jù)說迄今為止還沒有找到一種最好的增量序列,不過有一個(gè)強(qiáng)烈的要求是 最后一個(gè)增量值必須等于 1 才行。

給定實(shí)例的shell排序的排序過程

假設(shè)待排序文件有10個(gè)記錄,其關(guān)鍵字分別是:

49,38,65,97,76,13,27,49,55,04。

增量序列的取值依次為:

5,3,1

算法實(shí)現(xiàn):

<?php//希爾排序(對直接插入排序的改進(jìn))function ShellSort(array &$arr){  $count = count($arr);  $inc = $count;  //增量  do {    //計(jì)算增量    //$inc = floor($inc / 3) + 1;    $inc = ceil($inc / 2);    for ($i = $inc; $i < $count; $i++) {      $temp = $arr[$i];  //設(shè)置哨兵      //需將$temp插入有序增量子表      for ($j = $i - $inc; $j >= 0 && $arr[$j + $inc] < $arr[$j]; $j -= $inc) {        $arr[$j + $inc] = $arr[$j]; //記錄后移      }      //插入      $arr[$j + $inc] = $temp;    }    //增量為1時(shí)停止循環(huán)  } while ($inc > 1);}//$arr = array(9,1,5,8,3,7,4,6,2);$arr = array(49,38,65,97,76,13,27,49,55,04);ShellSort($arr);var_dump($arr);

運(yùn)行結(jié)果:

array(10) { [0]=> int(4) [1]=> int(13) [2]=> int(27) [3]=> int(38) [4]=> int(49) [5]=> int(49) [6]=> int(55) [7]=> int(65) [8]=> int(76) [9]=> int(97)}

復(fù)雜度分析:

通過以上代碼的分析,相信大家已經(jīng)有些明白,希爾排序的關(guān)鍵并不是隨便分組后各自排序,而是將相隔某個(gè)“增量”的記錄組成一個(gè)子序列,實(shí)現(xiàn)跳躍式的移動(dòng),使得排序的效率提高。

最壞的情況下時(shí)間復(fù)雜度是 O(n^2)。

希爾排序是不穩(wěn)定排序。

本文參考自《大話數(shù)據(jù)結(jié)構(gòu)》,在此僅作記錄,方便以后查閱,大神勿噴!

相關(guān)推薦:

PHP排序算法系列之插入排序?qū)嵗窒?/p>

以上就是PHP排序算法之希爾排序(Shell Sort)的詳細(xì)內(nèi)容,更多請關(guān)注 其它相關(guān)文章!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美人与牲禽动交精品一区 | 久久久国产视频 | 久久青草影院 | 国产精品视频一区二区噜噜 | 中文字幕天堂在线 | 欧美成年性h版影视中文字幕 | 91 成人 | 久久精品国产一区二区 | 久久精品国产清自在天天线 | 国产婷婷一区二区三区 | 国产亚洲精彩视频 | 精品国产乱码久久久久久久 | 国产精品久久999 | 日韩视频网址 | 综合精品一区 | 成人综合在线观看 | 永久av在线免费观看 | 男男啪羞羞视频网站 | 国产亚洲精品久久久久久网站 | 国产精品一区二区三区在线播放 | 高清在线国产 | 亚洲成人高清在线观看 | 羞羞的视频免费在线观看 | 国产1区2| 深夜小视频在线观看 | 一级电影免费看 | 国产羞羞视频在线观看免费应用 | 一区二区三区在线观看国产 | 一级黄色在线观看 | 午夜影院a| 国产人成免费爽爽爽视频 | 视频一区二区视频 | 美女黄影院 | 色综合一区二区 | 国色天香综合网 | 国产成人在线免费看 | 视频一区免费观看 | 久草在线观看福利 | 中文字幕在线视频日本 | 在线播放黄色片 | 羞羞网站在线观看入口免费 |