php4种基本算法的时间复杂度,PHP中各种排序算法(时间复杂度等)

时间复杂度为O(n2)的算法:

插入排序:(先把要排序的数,拿出来,然后遍历是否存在大于该数的,有移动位置,否,继续往后)

$n = count($nu);

for($i =1;$i=0 && $temp冒泡排序:(即大的数一直往后排,需要遍历n-1次,每次需要再遍历n-1-i 次)

$n = count($nu);

for($i=0;$i$nu[$j+1])

{

$tem = $nu[$j];

$nu[$j] = $nu[$j+1];

$nu[$j+1] = $tem;

}

}

}

时间复杂度为O(nlogn)的算法:

快速排序(首先找个参考值,找到比它小的分到一个数组,找到大的分到另一个数组,然后依次找下去)重点是递归思想,每次递归完,都会把找到的数组进行排序。最后返会的是有序的数组。

function quickSort(&$arr){

if(count($arr)>1){

$k=$arr[0];

$x=array();

$y=array();

$_size=count($arr);

for($i=1;$i$k){

$y[]=$arr[$i];

}

}

$x=quickSort($x);

$y=quickSort($y);

var_dump($x);

var_dump($y);

var_dump($k);

//var_dump($y);

//var_dump(array_merge($x,array($k),$y));

return array_merge($x,array($k),$y);

}else{

return $arr;

}

}

quickSort($nu);归并排序:

$arr=array(5,3,2,4,1);

$GLOBALS['res']=0;

function merge_sort(&$arr){

$len=count($arr);

if($len==1)

return $arr;

$middle=intval($len/2);

$left=array_slice($arr,0,$middle);

$right=array_slice($arr,$middle);

merge_sort($left);

merge_sort($right);

$arr=merge($left,$right);

return $GLOBALS['res'];

}

function merge($leftarr,$rightarr){

$arr = array();

static $res = 0;

while(count($leftarr) && count($rightarr))

{

if($leftarr[count($leftarr)-1] > $rightarr[count($rightarr)-1]){

$res = $res+count($rightarr);

$GLOBALS['res'] =$res;

array_unshift($arr,array_pop($leftarr));

}else{

array_unshift($arr,array_pop($rightarr));

}

}

return array_merge($rightarr,$leftarr,$arr);

}sort函数----usort();使用自定义的函数,比较大小。

usort(array,myfunction);

参数

描述

array

必需。规定要进行排序的数组。

myfunction

可选。定义可调用比较函数的字符串。如果第一个参数小于等于或大于第二个参数,那么比较函数必须返回一个小于等于或大于 0 的整数。

$numbers = array(3,32,321);

usort($numbers, function($a,$b){

if($a>$b)return 1;

return -1;

// if("$a$b" > "$b$a") return 1;

// return -1;

});

var_dump($numbers);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值