关于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循环