最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php實現(xiàn)希爾排序算法的方法分析

 更新時間:2017年12月09日 12:03:50   作者:根號五  
這篇文章主要介紹了php實現(xiàn)希爾排序算法的方法,簡單說明了希爾排序的原理,并結(jié)合實例形式分析了php實現(xiàn)希爾排序的具體操作技巧,需要的朋友可以參考下

本文實例講述了php實現(xiàn)希爾排序算法的方法。分享給大家供大家參考,具體如下:

雖然現(xiàn)在各種程序語言都有其各自強大的排序庫函數(shù),但是這些底層實現(xiàn)也都是利用這些基礎(chǔ)或高級的排序算法。

理解這些復(fù)雜的排序算法還是很有意思的,體會這些排序算法的精妙~

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

希爾排序中一個常數(shù)因子n,原數(shù)組被分成各個小組,每個小組由h個元素組成,很可能會有多余的元素。當(dāng)然每次循環(huán)的時候,h也是遞減的(h=h/n)。第一次循環(huán)就是從下標(biāo)為h開始。希爾排序的一個思想就是,分成小組去排序。

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

<?php
/**
 * 希爾排序
 */
function shell_sort(array $arr){
  // 將$arr按升序排列
  $len = count($arr);
  $f = 3;// 定義因子
  $h = 1;// 最小為1
  while ($h < $len/$f){
    $h = $f*$h + 1; // 1, 4, 13, 40, 121, 364, 1093, ...
  }
  while ($h >= 1){ // 將數(shù)組變?yōu)閔有序
    for ($i = $h; $i < $len; $i++){ // 將a[i]插入到a[i-h], a[i-2*h], a[i-3*h]... 之中 (算法的關(guān)鍵
      for ($j = $i; $j >= $h; $j -= $h){
        if ($arr[$j] < $arr[$j-$h]){
          $temp = $arr[$j];
          $arr[$j] = $arr[$j-$h];
          $arr[$j-$h] = $temp;
        }
        //print_r($arr);echo '<br/>'; // 打開這行注釋,可以看到每一步被替換的情形
      }
    }
    $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 '<pre>';
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
)
)
*
*/

PS:這里再為大家推薦一款關(guān)于排序的演示工具供大家參考:

在線動畫演示插入/選擇/冒泡/歸并/希爾/快速排序算法過程工具:
http://tools.jb51.net/aideddesign/paixu_ys

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php排序算法總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》及《PHP數(shù)學(xué)運算技巧總結(jié)

希望本文所述對大家PHP程序設(shè)計有所幫助。

  • GBK的頁面輸出JSON格式的php函數(shù)

    GBK的頁面輸出JSON格式的php函數(shù)

    encode之前轉(zhuǎn)換為utf-8,decode之后轉(zhuǎn)回gbk:
    2010-02-02
  • PHP編程計算兩個時間段是否有交集的實現(xiàn)方法(不算邊界重疊)

    PHP編程計算兩個時間段是否有交集的實現(xiàn)方法(不算邊界重疊)

    這篇文章主要介紹了PHP編程計算兩個時間段是否有交集的實現(xiàn)方法,結(jié)合具體實例形式對比分析了php時間段的轉(zhuǎn)換、比較等相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • PHP函數(shù)參數(shù)傳遞的方式整理

    PHP函數(shù)參數(shù)傳遞的方式整理

    在本篇文章里小編給大家整理的是關(guān)于PHP函數(shù)參數(shù)傳遞的方式整理內(nèi)容,需要的朋友們可以參考下。
    2020-03-03
  • PHP安全技術(shù)之 實現(xiàn)php基本安全

    PHP安全技術(shù)之 實現(xiàn)php基本安全

    php開發(fā)過程中,需要注意的一些安全小細節(jié),屏蔽錯誤提示,多考慮下安全問題。
    2010-09-09
  • php遍歷目錄viewDir函數(shù)

    php遍歷目錄viewDir函數(shù)

    php遍歷目錄,找出目錄下某個后綴名的所有文件
    2009-12-12
  • PHP數(shù)據(jù)庫連接mysql與mysqli對比分析

    PHP數(shù)據(jù)庫連接mysql與mysqli對比分析

    這篇文章主要介紹了PHP數(shù)據(jù)庫連接mysql與mysqli對比分析,以及php中mysqli用法舉例,感興趣的小伙伴們可以參考一下
    2016-01-01
  • PHP 常用數(shù)組內(nèi)部函數(shù)(Array Functions)介紹

    PHP 常用數(shù)組內(nèi)部函數(shù)(Array Functions)介紹

    本章節(jié)我們還要學(xué)習(xí)一些其它常用的有關(guān)數(shù)組的內(nèi)部函數(shù):count,sizeof、sort、asort、ksort等等,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-06-06
  • 剖析 PHP 中的輸出緩沖

    剖析 PHP 中的輸出緩沖

    剖析 PHP 中的輸出緩沖...
    2006-12-12
  • ThinkPHP模板標(biāo)簽eq if 中區(qū)分0,null,false的方法

    ThinkPHP模板標(biāo)簽eq if 中區(qū)分0,null,false的方法

    下面小編就為大家?guī)硪黄猅hinkPHP模板標(biāo)簽eq if 中區(qū)分0,null,false的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 最新評論

    浦县| 城市| 枣庄市| 辛集市| 阳江市| 曲靖市| 霍山县| 六枝特区| 鸡东县| 福清市| 长岛县| 卢氏县| 民乐县| 华亭县| 清镇市| 嘉鱼县| 巴林右旗| 昌吉市| 剑阁县| 荔浦县| 繁峙县| 大新县| 富锦市| 赤水市| 乌拉特前旗| 江山市| 玛纳斯县| 池州市| 定结县| 鹰潭市| 兰州市| 长岭县| 札达县| 漯河市| 民乐县| 东丽区| 新化县| 台北市| 石城县| 册亨县| 三亚市|