亚洲一级电影在线观看,九九精品无码专区免费,亚洲AV无码资源在线观看 ,欧美国产高清

常見的php排序算法

時間:2024-07-24 22:06:21 PHP 我要投稿
  • 相關推薦

常見的php排序算法

  本文匯總了常見的php排序算法,在進行算法設計的時候有不錯的借鑒價值。現分享給大家供參考之用。具體如下:

  一、插入排序

  用文字簡單的描述,比如說$arr = array(4,2,4,6,3,6,1,7,9); 這樣的一組數字進行順序排序:

  那么,首先,拿數組的第二個元素和第一元素比較,假如第一個元素大于第二元素,那么就讓兩者位置互換,接下來,拿數組的第三個元素,分別和第二個,第一個元素比較,假如第三個元素小,那么就互換。依次類推。這就是插入排序,它的時間頻度是:1+2+...+(n-1)=(n^2)/2。則它的時間復雜度為O(n^2).

  php實現代碼如下:

  <?phpfunction Sort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=1;$i<$count;$i++){ tmp="$arr[$i];" j="">=0&&$arr[$j]<$arr[$i]){ return="">

  二、選擇排序

  選擇排序用語言描述的話,可以這樣,如:$arr = array(4,3,5,2,1);

  首先,拿第一個和后面所有的比,找出最小的那個數字,然后和第一個數組互換(當然,如果是第一個最小,那么就不用互換了),接著循環,即:拿第二個和后面的比較,找出最小的數字,然后和第二個數字互換,依次類推,也就是說每次都是找出剩余最小的值。 可得到:第一次,時間頻度 是n, (第一個和后面的n-1個比較,找到最小的,再看是不是第一個,不是第一個的話進行互換) 在往后,依次是 減一 。 它的時間復雜度,也是O(n^2);

  php實現代碼如下:

  <?phpfunction selectSort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=0;$i<$count;$i++){ $min=$i; for(j=$i+1;$j<$count;$j++){>$arr[$j]){ $min = $j; //找到最小的那個元素的下標 } } if($min!=$i){//如果下標不是$i 則互換。 $tmp= $arr[$i]; $arr[$i] = $arr[$min]; $arr[$min] = $tmp; } } return $arr; }?>

  三、冒泡排序

  冒泡排序其實上是和選擇排序相比,并無明顯差別。都是找到最小的,放到最左端。依次循環解決問題。差別在于冒泡排序的交換位置的次數較多,而選擇排序則是找到最小的元素的下標,然后直接和最左端的交換位置。

  php實現代碼如下:

  <?phpfunction selectSort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=0;$i<$count;$i++){ for(j=$i+1;$j<$count;$j++){>$arr[$j]){ $tmp= $arr[$i]; $arr[$i] = $arr[$i]; $arr[$i] = $tmp; } } } return $arr; }?>

  四、快速排序

  快速排序,用語言來形容的話,從數組中選擇一個值$a,然后和其余元素進行比較,比$a大的放到數組right中,反之,放到數組left中。然后將left right 分別進行遞歸調用,即:再細分left right ,最后進行數組的合并。

  php實現快速排序:

  <?phpfunction mySort($arr){ $count = count($arr); if($count<2){ return $arr; } $key = $arr[0];//選擇第一個元素作為比較元素,可選其他 $left = array(); $right = array(); for($i=1;$i<$count;$i++){ key="">=$arr[$i]){ $left[] = $arr[$i]; }else{ $right[] = $arr[$i]; } } $left = mySort($left); $right = mySort($right); $result = array_merge($left,$right); return $result; }?>

  五、歸并排序

  其實歸并排序是一種拆分,合并的思想。和快速排序思想有共通之處,左邊一堆,右邊一堆,然后進行合并。通過遞歸實現排序。 區別之處呢? 他們的區別也是思想上本質的區別,快速排序的拆分,是選擇了特定的值進行大小比較,從而分為left 和 right 。也就是小的一堆放入left,大的一堆放入right。而后,小的left 再細分為left1 right1。。。。通過進行類似的遞歸完成排序。也就是說,一直細分下去,遞歸最末尾的left1就是最小值。

  而歸并排序,是從幾何上的左右切分,一直遞歸切分成2或者1的最小粒度的數組,然后才開始進行比較大小,然后合并。此處的比較大小是:兒子left的元素 和兒子的right元素 進行比較,而后進行排序合并成為父親left或者right。在此,直到拿到各自排序合并完成最后兩個數組:最起初的left 和right,也僅僅直到他們各自的順序,并不能確認整個數組的順序,還是需要通過最終的left right 比較后合并才能完成真正意義上的排序。

  <?phpfunction gbSort($arr){ if(count($arr)<=1){return min="floor(count($arr)/2);//取中間數字進行拆分" left="gbSort($left);" right="gbSort($right);" return="" function="">$right[0] ? array_shift($right) : array_shift($left); //進行比較,小的移除,并且放入到數組$m中。 } return arr_merge($m,$left,$right);//進行合并(由于不知道left right 哪個會為空,所以進行統一合并)}?>

  六、堆排序

  本例中fixDown函數實現對某一個節點的向下調整,這里默認的是起始節點為1,方便計算父子節點關系

  注:

  起始節點為1的父子關系: 父節點k, 子節點為2K、2k+1 子節點j, 父節點為 floor(j/2) floor為向下取整

  起始節點為0的父子關系: 父節點k, 子節點為2K+1, 2k+2 子節點j, 父節點為 floor((j-1)/2)

  參數$k為調整點位置, $lenth為數組長度,也就是從1起始到最后一個節點的坐標.

  <?phpfunction fixDown(&$arr, $k, $lenth){while(2*$k<=$lenth) { //只要當前節點有子節點, 就需要繼續該循環 $j = $k*2; if ($j<$lenth && $arr[$j]<$arr[$j+1]) $j++; // 只要子節點有右節點,且右節點比左節點大,那么切換到右節點操作。 if ($arr[$j] < $arr[$k]) break; // 如果子節點都沒有父節點大, 那么調整結束。 exch($arr[$j], $arr[$k]); $k = $j; }}function exch(&$a, &$b) { $tmp = $a; $a = $b; $b = $tmp;}function headSort(&$arr){ $len = count($arr); array_unshift($arr, NULL); for($i=$len/2;$i>=1;$i--) { fixDown($arr, $i, $len); } while($len>1) { exch($arr[1], $arr[$len]); fixDown($arr, 1, --$len); } array_shift($arr);}$arr = array(4,6,4,9,2,3);headSort($arr);?>

  希望本文所述排序算法實例對大家的php程序設計有所幫助。

【常見的php排序算法】相關文章:

PHP中的排序函數區別分析08-23

關于php堆排序實現原理與應用方法10-09

常用排序算法之JavaScript實現代碼段06-04

關于php面試寶典及PHP面試技巧08-16

PHP的壓縮函數06-21

php高級教程01-23

如何學好PHP知識09-20

 PHP的基礎編程與應用10-16

淺析php函數的實例06-08

配置 PHP 調試環境07-20

主站蜘蛛池模板: 陵川县| 亚洲无码精品视频| 亚洲伊人成色综合网| 久久久无码精品亚洲日韩按摩| 尤溪县| 亚洲蜜桃v妇女| 成人免费视频国产免费麻豆| 亚洲不卡av不卡一区二区| 亚洲中文字幕乱码一区| 激情六月丁香婷婷| 狠狠噜狠狠狠狠丁香五月| 精品影片在线观看的网站| 人妻va精品va欧美va| 国产精品吹潮在线观看中文| 国产在线国偷精品产拍| 亚洲区小说区图片区qvod| 欧美成人看片一区二区三区| 少妇被爽到高潮动态图| 麻豆aⅴ精品无码一区二区| 国产欧美日韩va另类在线播放| 亚洲欧美洲成人一区二区三区| 国产免费牲交视频| 日韩在线中文| 伊人久久精品在热线热| 国产亚洲精品品视频在线 | 柘荣县| а√天堂中文在线资源库免费观看 | 在线观看亚洲人成网站| 国产v亚洲v天堂无码久久久| 国产一区二区在线影院| 日韩欧美国产精品| 欧美日韩亚洲国产欧美电影 | 久久 国产 尿 小便 嘘嘘| 欧美日韩高清在线| 香蕉久久av一区二区三区| 2019精品国自产拍在线不卡| 成人无码免费一区二区三区| 中文有码无码人妻在线短视频| 健康| 亚洲性啪啪无码av天堂| 无码少妇高潮浪潮av久久|