中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

PHP數組排序之sort、asort與ksort用法實例
來源:易賢網 閱讀:2504 次 日期:2014-09-12 16:12:31
溫馨提示:易賢網小編為您整理了“PHP數組排序之sort、asort與ksort用法實例”,方便廣大網友查閱!

一、插入排序

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

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

php實現代碼如下:

01<?php

02function insertSort($arr){

03 $count = count($arr);

04 if($count<2){

05 return $arr;

06 }

07 for($i=1;$i<$count;$i++){

08 $tmp = $arr[$i];

09 $j=$i-1;

10 while(j>=0&&$arr[$j]<$arr[$i]){

11 $arr[$i] = $arr[$j];

12 $arr[$j] = $tmp;

13 $j--;

14 }

15 }

16 return $arr;

17 }

18?>

二、選擇排序

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

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

php實現代碼如下:

01<?php

02function selectSort($arr){

03

04 $count = count($arr);

05 if($count<2){

06 return $arr;

07 }

08 for($i=0;$i<$count;$i++){

09 $min=$i;

10 for(j=$i+1;$j<$count;$j++){

11 if($arr[$min]>$arr[$j]){

12 $min = $j; //找到最小的那個元素的下標

13 }

14 }

15 if($min!=$i){//如果下標不是$i 則互換。

16 $tmp= $arr[$i];

17 $arr[$i] = $arr[$min];

18 $arr[$min] = $tmp;

19 }

20 }

21 return $arr;

22 }

23?>

三、冒泡排序

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

php實現代碼如下:

01<?php

02function selectSort($arr){

03

04 $count = count($arr);

05 if($count<2){

06 return $arr;

07 }

08 for($i=0;$i<$count;$i++){

09 for(j=$i+1;$j<$count;$j++){

10 if($arr[$i]>$arr[$j]){

11 $tmp= $arr[$i];

12 $arr[$i] = $arr[$i];

13 $arr[$i] = $tmp;

14 }

15 }

16 }

17 return $arr;

18 }

19?>

四、快速排序

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

php實現快速排序:

01<?php

02function mySort($arr){

03

04 $count = count($arr);

05 if($count<2){

06 return $arr;

07 }

08 $key = $arr[0];//選擇第一個元素作為比較元素,可選其他

09 $left = array();

10 $right = array();

11 for($i=1;$i<$count;$i++){

12 if($key>=$arr[$i]){

13 $left[] = $arr[$i];

14 }else{

15 $right[] = $arr[$i];

16 }

17 }

18 $left = mySort($left);

19 $right = mySort($right);

20 $result = array_merge($left,$right);

21 return $result;

22 }

23?>

五、歸并排序

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

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

01<?php

02function gbSort($arr){

03 if(count($arr)<=1){return $arr;}

04 $min = floor(count($arr)/2);//取中間數字進行拆分

05 $left = array_slice($arr,0,$min);

06 $right = array_slice($arr,$min);

07 $left = gbSort($left); //遞歸

08 $right = gbSort($right);

09 return get_merge($left,$right);//調用排序合并函數進行合并

10}

11function get_merge($left,$right){

12 while(count($left) && count($right)){

13 $m[] = $left[0]>$right[0] ? array_shift($right) : array_shift($left);

14 //進行比較,小的移除,并且放入到數組$m中。

15 }

16 return arr_merge($m,$left,$right);//進行合并(由于不知道left right 哪個會為空,所以進行統一合并)

17}

18

19?>

六、堆排序

本例中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起始到最后一個節點的坐標.

01<?php

02function fixDown(&$arr, $k, $lenth)

03{

04  while(2*$k<=$lenth) { //只要當前節點有子節點, 就需要繼續該循環

05 $j = $k*2;

06 if ($j<$lenth && $arr[$j]<$arr[$j+1]) $j++; // 只要子節點有右節點,且右節點比左節點大,那么切換到右節點操作。

07 if ($arr[$j] < $arr[$k]) break; // 如果子節點都沒有父節點大, 那么調整結束。

08 exch($arr[$j], $arr[$k]);

09    $k = $j;

10 }

11}

12

13function exch(&$a, &$b) {

14 $tmp = $a; $a = $b; $b = $tmp;

15}

16

17function headSort(&$arr)

18{

19 $len = count($arr);

20 array_unshift($arr, NULL);

21 for($i=$len/2;$i>=1;$i--) {

22 fixDown($arr, $i, $len);

23 }

24 while($len>1) {

25 exch($arr[1], $arr[$len]);

26 fixDown($arr, 1, --$len);

27 }

28 array_shift($arr);

29} 本文實例講解了PHP數組排序中sort、asort與ksort的用法,供大家參考借鑒之用。具體實例如下所示:

01<?php

02$arr = array('d'=>'sdf', 'r'=>'sdf', 'a'=> 'eee');

03//sort($arr); // 對數組的值進行重排, 刪除之前的鍵值, 變為索引數組

04//asort($arr); // 對數組按照值進行重排,并保持索引關系,索引數組和關聯數組均適用

05ksort($arr); // 對數組按照鍵值進行重排,并保持索引關系,索引數組和關聯數組均適用

06

07// 對應逆序還有rsort arsort krsort

08// 使用函數比較有usort uksort uasort 第二個參數為比較的函數 需要在第一個參數相等 小于 大于第二個參數時 返回 等于 小于 大于 0 的值 浮點數只會取整數部分

09

10print_r($arr);

11?>

本文實例中僅對ksort用法做了示范,感興趣的讀者可以再測試sort與asort的運行結果,以便加深印象,牢固掌握。希望本文實例對大家PHP程序設計有所幫助。

30$arr = array(4,6,4,9,2,3);

31headSort($arr);

32?>

更多信息請查看IT技術專欄

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久精品成人一区二区三区| 欧美在线视频网站| 国内精品亚洲| 欧美日韩精品一区二区在线播放| 中日韩美女免费视频网址在线观看 | 亚洲国产日韩欧美| 国产色爱av资源综合区| 国产精品分类| 欧美日韩一区精品| 欧美激情视频一区二区三区在线播放 | 91久久在线| 在线观看欧美日本| 尤物精品国产第一福利三区| 国产曰批免费观看久久久| 国产精品一区二区久激情瑜伽| 欧美精品日韩| 欧美日韩dvd在线观看| 欧美激情在线免费观看| 欧美高清视频| 欧美激情国产高清| 欧美激情精品久久久久久久变态 | 国产一区高清视频| 国产精品亚洲不卡a| 国产精品欧美日韩一区| 国产精品网站在线观看| 国产精品尤物| 国内精品久久久久久 | 久久视频国产精品免费视频在线| 欧美在线视频免费| 欧美一区二区性| 久久久青草婷婷精品综合日韩| 午夜电影亚洲| 久久精品久久综合| 欧美aa国产视频| 欧美精品亚洲二区| 欧美视频在线免费| 国产一区美女| 最近中文字幕日韩精品| 99国产精品99久久久久久粉嫩| 亚洲乱码一区二区| 9国产精品视频| 欧美亚洲一级片| 久久在线观看视频| 欧美日韩三区| 国产一区二区按摩在线观看| 亚洲国产精品va在线看黑人| 一区二区高清| 久久精品国产亚洲一区二区三区| 麻豆免费精品视频| 国产精品裸体一区二区三区| 一区二区亚洲精品国产| av成人免费观看| 久久精品亚洲| 欧美性一区二区| 经典三级久久| 亚洲一区二区在线免费观看| 久久久人人人| 国产精品播放| 亚洲精品免费观看| 欧美亚洲视频一区二区| 欧美激情精品| 黄色亚洲在线| 国产一区二区三区四区在线观看| 亚洲精品韩国| 久久国产精品72免费观看| 欧美人在线视频| 国产在线欧美日韩| 亚洲先锋成人| 欧美国产国产综合| 精品成人国产| 欧美一区二区三区免费观看视频| 欧美福利一区二区| 国内精品久久久| 午夜免费在线观看精品视频| 欧美精品在线免费播放| 在线播放精品| 久久激情一区| 国产精品人人爽人人做我的可爱| 亚洲国产精品欧美一二99| 欧美一区二区在线观看| 国产精品美女www爽爽爽视频 | 这里是久久伊人| 欧美高清日韩| 亚洲第一页在线| 久久精品视频免费| 国产日韩一区在线| 亚洲欧美日韩一区| 国产精品久久久久免费a∨| 亚洲人成网在线播放| 老司机免费视频久久 | 亚洲另类黄色| 欧美激情精品久久久久久| 国产一区二区三区免费在线观看 | 久久综合网hezyo| 国产一区二区0| 国产日韩欧美亚洲一区| 久久久www| 国产精品专区一| 亚洲精品欧美在线| 欧美成人精品不卡视频在线观看| 国产日韩欧美视频| 99国产精品国产精品毛片| 欧美精品一区二区三区视频| 精东粉嫩av免费一区二区三区| 亚洲一区二区三区四区五区午夜| 蜜臀av国产精品久久久久| 韩国av一区二区三区四区| 久久另类ts人妖一区二区| 黑人中文字幕一区二区三区| 久久看片网站| 亚洲激情网站免费观看| 欧美激情一区二区三区蜜桃视频 | 久久久久久久综合日本| 激情久久久久| 日韩系列欧美系列| 欧美午夜宅男影院| 欧美一区二区日韩一区二区| 韩日视频一区| 欧美高清在线| 亚洲婷婷国产精品电影人久久| 91久久精品日日躁夜夜躁国产| 国产一区二区三区网站| 国产欧美一区二区三区在线老狼 | 欧美日韩国产综合视频在线观看| 国产精品萝li| 亚洲精品一区二区三区四区高清 | 亚洲精品在线二区| 久久精品一级爱片| 国产自产v一区二区三区c| 理论片一区二区在线| 亚洲人妖在线| 好吊色欧美一区二区三区视频| 校园激情久久| 篠田优中文在线播放第一区| 一区二区91| 亚洲一区亚洲| 小黄鸭精品aⅴ导航网站入口| 性做久久久久久久免费看| 99精品欧美一区二区蜜桃免费| 久久精品国产综合精品| 一区二区三区高清不卡| 亚洲日本视频| 99re在线精品| 亚洲精品久久在线| 日韩一级在线| 激情av一区| 99ri日韩精品视频| 久久久综合香蕉尹人综合网| 美乳少妇欧美精品| 欧美国产日本韩| 国产精品久久久久久av福利软件| 国产在线观看91精品一区| 国产精品午夜在线| 欧美亚洲成人网| 国产香蕉97碰碰久久人人| 久久国产一区二区| 亚洲欧美精品在线观看| 亚洲电影第三页| 国产亚洲欧美一区二区三区| 欧美人交a欧美精品| 日韩亚洲欧美在线观看| 国产精品久99| 欧美日本高清一区| 欧美xxx成人| 久久天天躁狠狠躁夜夜av| 午夜伦欧美伦电影理论片| 亚洲精品视频在线看| 极品尤物久久久av免费看| 国产欧美亚洲一区| 国产亚洲精品bt天堂精选| 国产精品久久久久一区二区三区 | 一区二区亚洲精品| 国产亚洲高清视频| 国产一区二区三区最好精华液| 国产精品免费观看视频| 欧美性大战久久久久久久| 欧美日韩亚洲综合一区| 欧美成人精品激情在线观看| 亚洲欧美激情一区| 欧美一级播放| 欧美一区1区三区3区公司| 亚洲欧美精品一区| 久久久www成人免费无遮挡大片| 新狼窝色av性久久久久久| 久久精品一区二区三区四区| 久久久国产精品一区| 另类国产ts人妖高潮视频| 狂野欧美一区| 欧美国产日韩一二三区| 国产麻豆午夜三级精品| 国产日韩一区| 欧美区一区二区三区| 久久综合九色综合久99| 在线免费精品视频| 狠狠操狠狠色综合网| 欧美成年视频| 欧美与黑人午夜性猛交久久久| 国产精品福利网| 欧美国产一区二区三区激情无套| 亚洲午夜在线观看|