php如何更新排序,PHP 排序方法 (持續更新)

class sortFunction{

/**

* [bubbleSort 冒泡排序(我這個是從頭到尾,不是從尾到頭。排的順序不同]

* @param [array] $arr [description]

* @return [array] $arr [description]

* 依次比较相邻的两个数,将小数放在前面,大数放在后面

* -----解釋來自百度

*/

function bubbleSort($arr){

$iCount = count($arr);// 數組元素個數。

if($iCount<2){

return $arr;

} for($i=0;$i

for($j=$iCount-1;$j>$i;$j--){// 冒泡過程

if($arr[$j]

$aTemp = $arr[$j];

$arr[$j] = $arr[$j-1];

$arr[$j-1] = $aTemp;

}

}

}

return $arr;

}

/**

* [quickSort 快速排序]

* @param [array] $arr [description]

* @return [array] $arr [description]

*

* 通过一趟排序将要排序的数据分割成独立的两部分,

* 其中一部分的所有数据都比另外一部分的所有数据都要小,

* 然后再按此方法对这两部分数据分别进行快速排序.

* -----解釋來自百度

*/

function quickSort($arr){

$iCount = count($arr);// 數組元素個數。

if($iCount<2){

return $arr;

}

$key = $arr[0];// 隨便一個元素值作為key值。

$arrLeft = array();// 所有比$key小的元素放在$arrLeft中

$arrRight = array();// 所以比$key大的元素放在$arrRight中

for($i=1;$i

if($arr[$i]<=$key){// 元素與$key比較

$arrLeft[] = $arr[$i];

}else{

$arrRight[] = $arr[$i];

}

}

$arrLeft = $this->quickSort($arrLeft);// 得到的$arrLeft在進行快速排序

$arrRight = $this->quickSort($arrRight); //得到的$arrRight在進行快速排序

$arr = array_merge($arrLeft,array($key),$arrRight); //將$arrLeft,$key,$arrRight合併,得到最終排序數組。

return $arr;

}

/**

* [insertSort 插入排序]

* @param [int] $var [待排序數值]

* @param [array] $arr [已排序數組]

* @return [type] [description]

* 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,

* 从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序

*/

function insertSort($var,$arr){

$iCount = count($arr);

$arrLeft = array();

$arrRight = array();

if($arr[0]>$var){//$var小於最小數時。插入數組頭部。

array_unshift($arr,$var);

return $arr;

}

if($arr[$iCount-1]

array_push($arr,$var);

return $arr;

}

for($i=0;$i

if($arr[$i]<=$var & $arr[$i+1]>$var){

$arrLeft = array_slice($arr,0,$i+1);

array_push($arrLeft,$var);//把$var,放入$arrLeft尾部。

$arrRight =array_slice($arr,$i+1);

}

}

$arr = array_merge($arrLeft,$arrRight);

return $arr;

}

/**

* [dichotomySort 二分法查找數組的元素位置]

* @param [type] $var [要找的元素]

* @param [type] $arr [已排序好的數組]

* @param [type] $start [每次查找的開始位置]

* @param [type] $end [每次查找的結束位置]

* @return [type] $mid [元素在數組的位置]

*/

function dichotomySort($var,$arr,$start,$end){

if(empty($start) & empty($end)){//判斷是否是第一次排序。

$start = 0 ;

$end = count($arr)-1;

}

if($start<=$end){

$mid = intval(($end+$start)/2);//從中間開始比較

if($arr[$mid]==$var){//如果$var與$arr[$mid]相等,則返回$mid.

return $mid;

}elseif($var

return $this->dichotomySort($var,$arr,$start,$mid-1);//$var比$arr[$mid]小,遞歸該方法。結束位置變成$mid-1;

}else{

return $this->dichotomySort($var,$arr,$mid+1,$end);//$var比$arr[$mid]大,遞歸該方法。開始位置變成$mid+1;

}

}else{

return "Your number is not in the array";//如果數組里沒有該元素,則返回該語句。

}

}

}

$arr = array(40,13,22,23,37,100,59,37,89,20,9);

$oTest = new sortFunction();

$aResult = $oTest->bubbleSort($arr);

$aInserResult = $oTest->dichotomySort(40,$aResult);

print_r($aInserResult);

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值