PHP版本常用的排序算法匯總
更新時(shí)間:2015年12月20日 11:46:25 投稿:hebedich
本文給大家匯總介紹了一些php中常見(jiàn)的排序算法的代碼,非常實(shí)用,有需要的小伙伴可以參考下。
//1、冒泡排序
function bubble_sort($arr){ $n = count($arr); for($i=0;$i<$n-1;$i++){ for($j=$i+1;;$j<$n-$i;$j++){ if($arr[$j]<$arr[$i]){ $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; } } } }
//2、歸并排序
//merge函數(shù)將指定的兩個(gè)有序數(shù)組(arr1arr2,)合并并且排序 //我們可以找到第三個(gè)數(shù)組,然后依次從兩個(gè)數(shù)組的開(kāi)始取數(shù)據(jù)哪個(gè)數(shù)據(jù)小就先取哪個(gè)的,然后刪除掉剛剛?cè)∵^(guò)///的數(shù)據(jù) function al_merge($arrA, $arrB) { $arrC = array(); while (count($arrA) && count($arrB)) { //這里不斷的判斷哪個(gè)值小,就將小的值給到arrC,但是到最后肯定要剩下幾個(gè)值, //不是剩下arrA里面的就是剩下arrB里面的而且這幾個(gè)有序的值,肯定比arrC里面所有的值都大所以使用 $arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB); } return array_merge($arrC, $arrA, $arrB); } //歸并排序主程序 function al_merge_sort($arr) { $len = count($arr); if ($len <= 1) { return $arr; //遞歸結(jié)束條件,到達(dá)這步的時(shí)候,數(shù)組就只剩下一個(gè)元素了,也就是分離了數(shù)組 } $mid = intval($len / 2); //取數(shù)組中間 $left_arr = array_slice($arr, 0, $mid); //拆分?jǐn)?shù)組0-mid這部分給左邊left_arr $right_arr = array_slice($arr, $mid); //拆分?jǐn)?shù)組mid-末尾這部分給右邊right_arr $left_arr = al_merge_sort($left_arr); //左邊拆分完后開(kāi)始遞歸合并往上走 $right_arr = al_merge_sort($right_arr); //右邊拆分完畢開(kāi)始遞歸往上走 $arr = al_merge($left_arr, $right_arr); //合并兩個(gè)數(shù)組,繼續(xù)遞歸 return $arr; } $arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9); print_r(al_merge_sort($arr));
//3、二分查找-遞歸
//二分查找-遞歸 function bin_search($array,$low,$high,$k){ if($low <= $high){ $mid = intval(($low+$high)/2); }else{ return false; } if($array[$mid] == $k){ return $mid; }elseif($k < $array[$mid]){ return bin_search($array,$low,$mid-1,$k); }else{ return bin_search($array,$mid+1,$high,$k); } } $arr = array(12, 5, 4, 7, 3, 8, 4, 2, 6, 4, 9); $index = bin_search($arr,0,10,12); //直接輸出為空,不解 echo(intval($index));
//4、二分查找-非遞歸
function bin_search($arr,$low,$high,$value) {//$arr 數(shù)組; $slow 最小索引; $high 最大索引 $value 查找的值 while($low<=$high) { $mid=intval(($low+$high)/2); if($value==$arr[$mid]){ return $mid; }elseif($value<$arr[$mid]){ $high=$mid-1; }else{ $low=$mid+1; } } return false; }
//5、快速排序
function quick_sort($arr) { $n=count($arr); if($n<=1) return $arr; $key=$arr[0]; $left_arr=array(); $right_arr=array(); for($i=1;$i<$n;$i++) { if($arr[$i]<=$key) $left_arr[]=$arr[$i]; else $right_arr[]=$arr[$i]; } $left_arr=quick_sort($left_arr); $right_arr=quick_sort($right_arr); return array_merge($left_arr,array($key),$right_arr); }
//6、選擇排序
function select_sort($arr) { $n=count($arr); for($i=0;$i<$n;$i++) { $k=$i; for($j=$i+1;$j<$n;$j++) { if($arr[$j]<$arr[$k]) $k=$j; } if($k!=$i) { $temp=$arr[$i]; $arr[$i]=$arr[$k]; $arr[$k]=$temp; } } return $arr; }
//7、插入排序
function insertSort($arr) { $n=count($arr); for($i=1;$i<$n;$i++) { $tmp=$arr[$i]; $j=$i-1; while($arr[$j]>$tmp) { $arr[$j+1]=$arr[$j]; $arr[$j]=$tmp; $j--; if($j<0) break; } } return $arr; }
您可能感興趣的文章:
相關(guān)文章
Laravel 5 框架入門(mén)(四)完結(jié)篇
本文是本系列教程的完結(jié)篇,我們將一起給 Page 加入評(píng)論功能,讓游客在前臺(tái)頁(yè)面可以查看、提交、回復(fù)評(píng)論,同時(shí)我們將在后臺(tái)完善評(píng)論管理功能,可以刪除、編輯評(píng)論。2015-04-04Thinkphp5 微信公眾號(hào)token驗(yàn)證不成功的原因及解決方法
下面小編就為大家?guī)?lái)一篇Thinkphp5 微信公眾號(hào)token驗(yàn)證不成功的原因及解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11php生成隨機(jī)密碼自定義函數(shù)代碼(簡(jiǎn)單快速)
創(chuàng)建大量用戶時(shí)一個(gè)一個(gè)想密碼是讓人頭疼的事,使用php隨機(jī)生成一個(gè)安全可靠的密碼,又方便又快捷,可以添加自己想的字符串,可以用在FTP密碼、Mysql密碼、網(wǎng)站后臺(tái)密碼等地方2014-05-05ThinkPHP5郵件發(fā)送服務(wù)封裝(可發(fā)附件)
這篇文章主要介紹了ThinkPHP5封裝郵件發(fā)送服務(wù),可發(fā)附件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10laravel join關(guān)聯(lián)查詢代碼實(shí)例
這篇文章主要介紹了laravel join關(guān)聯(lián)查詢代碼實(shí)例,join聯(lián)查是寫(xiě)sql查詢的時(shí)候常用也是高效的一種查詢,文中是結(jié)合laravel框架來(lái)使用聯(lián)查,有感興趣的同學(xué)可以學(xué)習(xí)下2021-03-03