php冒泡法有什么用(PHP冒泡算法)-冯金伟博客园

关于PHP冒泡排序方法。

从大到小:

& lt?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

/**

*冒泡排序算法示例

*/

//这里用一个一维数组作为演示

$demo_array = array(23,15,43,25,54,2,6,82,11,5,21,32,65);

//第一层for循环可以理解为从数组中的键0开始循环到最后一个。

for($ I = 0;$ i & ltcount($ demo _ array);$i

) {

//第二层将从关键字为$i的地方循环到数组的末尾

for($ j = $ I

1;$ j & ltcount($ demo _ array);$j

) {

//比较数组中两个相邻值的大小

if($ demo _ array[$ I]& lt;$demo_array[$j]) {

$ tmp = $ demo _ array[$ I];//这里的tmp是一个临时变量

$ demo _ array[$ I]= $ demo _ array[$ j];//第一次改变位置

$ demo _ array[$ j]= $ tmp;//完成位置交换。

}

}

}

//打印结果集

回声& # 39;& ltpre & gt';

var _ dump($ demo _ array);

回声& # 39;& lt/pre & gt;';

从小到大:

& lt?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

/**

*冒泡排序算法示例

*/

//这里用一个一维数组作为演示

$demo_array = array(23,15,43,25,54,2,6,82,11,5,21,32,65);

//第一层for循环可以理解为从数组中的键0开始循环到最后一个。

for($ I = 0;$ i & ltcount($ demo _ array);$i

) {

//第二层将从关键字为$i的地方循环到数组的末尾

for($ j = $ I

1;$ j & ltcount($ demo _ array);$j

) {

//比较数组中两个相邻值的大小

if($ demo _ array[$ I]& gt;$demo_array[$j]) {

$ tmp = $ demo _ array[$ I];//这里的tmp是一个临时变量

$ demo _ array[$ I]= $ demo _ array[$ j];//第一次改变位置

$ demo _ array[$ j]= $ tmp;//完成位置交换。

}

}

}

//打印结果集

回声& # 39;& ltpre & gt';

var _ dump($ demo _ array);

回声& # 39;& lt/pre & gt;';

主代码已经给你写好了,自己加前面部分就行了。

php常用算法和时间复杂度?

按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3)

复制代码 代码如下:

//二分查找O(log2n)

function erfen($a,$l,$h,$f){

if($l >$h){ return false;}

$m = intval(($l+$h)/2);

if ($a == $f){

return $m;

}elseif ($f < $a){

return erfen($a, $l, $m-1, $f);

}else{

return erfen($a, $m+1, $h, $f);

}

}

$a = array(1,12,23,67,88,100);

var_dump(erfen($a,0,5,1));

//遍历树O(log2n)

function bianli($p){

$a = array();

foreach (glob($p.’/*’) as $f){

if(is_dir($f)){

$a = array_merge($a,bianli($f));

}else{

$a = $f;

}

}

return $a;

}

//阶乘O(log2n)

function jc($n){

if($n<=1){

return 1;

}else{

return $n*jc($n-1);

}

}

//快速查找 O(n *log2(n))

function kuaisu($a){

$c = count($a);

if($c <= 1){return $a;}

$l = $r = array();

for ($i=1;$i<$c;$i++){

if($a < $a){

$l = $a;

}else{

$r = $a;

}

}

$l = kuaisu($l);

$r = kuaisu($r);

return array_merge($l,array($a),$r);

}

//插入排序 O(N*N)

function charu($a){

$c = count($a);

for($i=1;$i<$c;$i++){

$t = $a;

for($j=$i;$j>0 && $a>$t;$j–){

$a = $a;

}

$a = $t;

}

return $a;

}

//选择排序O(N*N)

function xuanze($a){

$c = count($a);

for($i=0;$i<$c;$i++){

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

if($a>$a){

$t = $a;

$a = $a;

$a = $t;

}

}

}

return $a;

}

//冒泡排序 O(N*N)

function maopao($a){

$c = count($a);

for($i=0;$i<$c;$i++){

for ($j=$c-1;$j>$i;$j–){

if($a < $a){

$t = $a;

$a = $a;

$a = $t;

}

}

}

return $a;

}

复制代码 代码如下:

/**

* 排列组合

* 采用二进制方法进行组合的选择,如表示5选3时,只需有3位为1就可以了,所以可得到的组合是 01101 11100 00111 10011 01110等10种组合

*

* @param 需要排列的数组 $arr

* @param 最小个数 $min_size

* @return 满足条件的新数组组合

*/

function plzh($arr,$size=5) {

$len = count($arr);

$max = pow(2,$len);

$min = pow(2,$size)-1;

$r_arr = array();

for ($i=$min; $i<$max; $i++){

$count = 0;

$t_arr = array();

for ($j=0; $j<$len; $j++){

$a = pow(2, $j);

$t = $i&$a;

if($t == $a){

$t_arr = $arr;

$count++;

}

}

if($count == $size){

$r_arr = $t_arr;

}

}

return $r_arr;

}

$pl = pl(array(1,2,3,4,5,6,7),5);

var_dump($pl);

php如何定义随机数的数组?

因为语言不同,代码就不贴了,思路如下: 定义数组,因为10个是确定的,所以用第一个for循环循环十次,每次都random出数字赋值给数组,之后冒泡排序,因为冒泡法的循环次数不定,用while内嵌for循环:

while(flag){ flag=false; for(i=0;i<10;i++) {if(a>a){a=a+a;a=a-a;a=a-a;flag=true;}} } 意思就是每次都用冒泡法给a0~a9两两排序,如果确实有不符合要求的就变动位置,如果都没有那么flag保持初值false则推出while循环