PHP网页编程之php 数组排序:php完成各类排序
可以说你的马步已经扎的差不多了,接下来就要开始练把势的时候了,如果有条件的话,用笔或者打印一个简易的PHP手册在身上,时不时的摸出来看看,记得,去WC也不能放过(^2^)。<?php
/**
* 各类排序
* @author zhaojaingwei
* @since 2011/11/21 16:14
*
*/
$list = array(3,5,1,2,10,8,15,19,20);
//快排
function fast(&$list, $low, $high){
if($high - $low > 5){
while($low < $high){
$key = excute($list, $low, $high);
fast($list, $low, $key - 1);
//fast($list, $key + 1, $high);//通俗递归完成
$low = $key + 1;//尾递归完成
}
}else{
insert($list);
}
}
//快排履行一次排序
function excute(&$list, $low, $high){
swap($list, $low, ($low + $high)/2);
$temp = $list[$low];
while($low < $high){
while($low < $high && $list[$high] > $temp){
$high --;
}
$list[$low] = $list[$high];
while($low < $high && $list[$low] < $temp){
$low ++;
}
$list[$high] = $list[$low];
}
$list[$low] = $temp;
return $low;
}
//堆排序
function heap(&$list){
buildheap($list);
for($i = count($list) - 1; $i > 0; $i --){
swap($list, $i, 0);
heapfy($list, 0, $i - 1);
}
}
//创立堆
function buildheap(&$list){
for($i = (count($list) - 2)/2; $i >= 0; $i --){
heapfy($list, $i, count($list) - 1);
}
}
//保护堆
function heapfy(&$list, $low, $high){
$temp = $list[$low];
for($i = ($low * 2 + 1); $i <= $high; $i = ($i * 2 + 1)){
if($i < $high && $list[$i] < $list[$i + 1]){
$i ++;
}
if($temp < $list[$i]){
swap($list, $i, $low);
$low = $i;
}else{
break;
}
}
$list[$low] = $temp;
}
//希尔排序
function shell(&$list){
$a = 0;
$code = count($list)/3 + 1;
while($code >= 1){
for($i = $code; $i < count($list); $i ++){
$a ++;
if($list[$i] < $list[$i - $code]){
$temp = $list[$i];
$list[$i] = $list[$i - $code];
$j = $i - 2*$code;
for(; $j >= 0 && $list[$j] > $temp; $j -= $code){
$list[$j + $code] = $list[$j];
$a ++;
}
$list[$j + $code] = $temp;
}
}
$code = $code/3;
}
echo $a;
}
//直接拔出排序
function insert(&$list){
$a = 0;
for($i = 1; $i < count($list); $i ++){
$a ++;
if($list[$i] < $list[$i - 1]){
$temp = $list[$i];
$list[$i] = $list[$i - 1];
$j = $i - 2;
for(; $list[$j] > $temp; $j --){
$a ++;
$list[$j + 1] = $list[$j];
}
$list[$j + 1] = $temp;
}
}
echo $a;
}
//复杂选择排序
function select(&$list){
$a = 0;
for($i = 0; $i < count($list); $i ++){
$min = $i;
$a ++;
for($j = $i + 1; $j < count($list); $j ++){
$a ++;
if($list[$j] < $list[$min]){
$min = $j;
}
}
if($min != $i)
swap($list, $i, $min);
}
echo $a;
}
//冒泡排序
function bubble(&$list){
$swap = true;
$a = 0;
for($i = 0; $i < count($list) && $swap; $i ++){
$swap = false;
$a ++;
for($j = count($list) - 2; $j >= $i; $j --){
$a ++;
if($list[$j] > $list[$j + 1]){
$swap = true;
swap($list, $j, $j + 1);
}
}
}
echo $a;
}
//挪动或互换函数
function swap(&$list, $i, $j){
$temp = $list[$i];
$list[$i] = $list[$j];
$list[$j] = $temp;
}
?> 本文链接http://www.cxybl.com/html/wlbc/Php/20120607/28506.html应该大致熟悉了一些学习过程,也许我的过程和你的有些出路,但是不管怎么样是殊途同归,我写这么多,也只是给大家一个借鉴的机会,至于好与不好,默默不敢打包票^0^ 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。 因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax 没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。 最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 当然这种网站的会员费就几十块钱。 曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ; 曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ; 当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标, 对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。 学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 当然这种网站的会员费就几十块钱。 开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
页:
[1]
2