一、冒泡排序

实例如下:

function bubble_sort{ $n = count; for{ for($j=$i+1;;$j//merge函数将指定的两个有序数组合并并且排序//我们可以找到第三个数组,然后依次从两个数组的开始取数据哪个数据小就先取哪个的,然后删除掉刚刚取过///的数据function al_merge{$arrC = array && count {//这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,//不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用$arrC[] = $arrA['0'] < $arrB['0'] ? array_shift : array_shift;}return array_merge;}//归并排序主程序function al_merge_sort{$len = count {return $arr; //递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组}$mid = intval; //取数组中间$left_arr = array_slice; //拆分数组0-mid这部分给左边left_arr$right_arr = array_slice; //拆分数组mid-末尾这部分给右边right_arr$left_arr = al_merge_sort; //左边拆分完后开始递归合并往上走$right_arr = al_merge_sort; //右边拆分完毕开始递归往上走$arr = al_merge($left_arr, $right_arr); //合并两个数组,继续递归return $arr;}$arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9);print_r;

php三种基础算法:冒泡,插入和快速排序法

递归函数为自调用函数,在函数体内直接或直接自个调用自个,但需求设置自调用的条件,若满意条件,则调用函数自身,若不满意则停止本函数的自调用,然后把目前流程的主控权交回给上一层函数来履行,也许这么给我们解说,仍是很难理解,比如

基本思想:

";//---------------------------------------// 常用排序算法//---------------------------------------//冒泡排序function BubbleSort{ $length = count{ return $arr; } for{ for($j=$length-1;$j>$i;$j--){ if{ $tmp = $arr[$j]; $arr[$j] = $arr[$j-1]; $arr[$j-1] = $tmp; } } } return $arr;}echo '冒泡排序:';echo implode."
";//快速排序function QSort{ $length = count; if{ return $arr; } $pivot = $arr[0];//枢轴 $left_arr = array(); $right_arr = array(); for{//注意$i从1开始0是枢轴 if{ $left_arr[] = $arr[$i]; }else{ $right_arr[] = $arr[$i]; } } $left_arr = QSort;//递归排序左半部分 $right_arr = QSort;//递归排序右半部份 return array_merge($left_arr,array;//合并左半部分、枢轴、右半部分}echo "快速排序:";echo implode."
";//选择排序function SelectSort{ $length = count{ return $arr; } for{ $min = $i; for($j=$i+1;$j";//插入排序function InsertSort{ $length = count; if{ return $arr; } for{ $x = $arr[$i]; $j = $i-1; while{ $arr[$j+1] = $arr[$j]; $j--; } $arr[$j+1] = $x; } return $arr;}echo '插入排序:';echo implode."
";//---------------------------------------// 常用查找算法//---------------------------------------//二分查找function binary_search{ while{ $mid = intval; if{ return $mid+1; }elseif{ $high = $mid-1; }elseif{ $low = $mid+1; } } return -1;}$key = 6;echo "二分查找{$key}的位置:";echo binary_search;//顺序查找function SqSearch{ $length = count; for{ if{ return $i+1; } } return -1;}$key = 8;echo "
顺序常规查找{$key}的位置:";echo SqSearch;//---------------------------------------// 常用数据结构//---------------------------------------//线性表的删除function delete_array_element{ $length = count; if($pos<1 || $pos>$length){ return "删除位置出错!"; } for($i=$pos-1;$i除第{$pos}位置上的元素后:";echo implode(' ',delete_array_element."
";/** * Class Node * PHP模拟链表的基本操作 */class Node{ public $data = ''; public $next = null;}//初始化function init{ $linkList->data = 0; //用来记录链表长度 $linkList->next = null;}//头插法创建链表function createHead{ for{ $newNode = new Node(); $newNode->data = $i; $newNode->next = $linkList->next;//因为PHP中对象本身就是引用所以不用再可用“&” $linkList->next = $newNode; $linkList->data++; }}//尾插法创建链表function createTail{ $r = $linkList; for{ $newNode = new Node(); $newNode->data = $i; $newNode->next = $r->next; $r->next = $newNode; $r = $newNode; $linkList->data++; }}//在指定位置插入指定元素function insert{ if($pos<1 && $pos>$linkList->data+1){ echo "插入位置错误!"; } $p = $linkList; for{ $p = $p->next; } $newNode = new Node(); $newNode->data = $elem; $newNode->next = $p->next; $p->next = $newNode;}//删除指定位置的元素function delete{ if($pos<1 && $pos>$linkList->data+1){ echo "位置不存在!"; } $p = $linkList; for{ $p = $p->next; } $q = $p->next; $p->next = $q->next; unset; $linkList->data--;}//输出链表数据function show{ $p = $linkList->next; while{ echo $p->data." "; $p = $p->next; } echo '
';}$linkList = new Node;//初始化createTail;//尾插法创建链表show;//打印出链表insert;//插入show;delete;//删除show;/** * Class Stack * 用PHP模拟顺序栈的基本操作 */class Stack{ //用默认值直接初始化栈了,也可用构造方法初始化栈 private $top = -1; private $maxSize = 5; private $stack = array(); //入栈 public function push{ if($this->top >= $this->maxSize-1){ echo "栈已满!
"; return; } $this->top++; $this->stack[$this->top] = $elem; } //出栈 public function pop(){ if{ echo "栈是空的!"; return ; } $elem = $this->stack[$this->top]; unset($this->stack[$this->top]); $this->top--; return $elem; } //打印栈 public function show(){ for($i=$this->top;$i>=0;$i--){ echo $this->stack[$i]." "; } echo "
"; }}$stack = new Stack;$stack->push;$stack->push;$stack->push;$stack->pop;$stack->pop;/** * Class Deque * 使用PHP实现双向队列 */class Deque{ private $queue = array(); public function addFirst{//头入队 array_unshift; } public function addLast{//尾入队 array_push; } public function removeFirst(){//头出队 array_shift; } public function removeLast(){//尾出队 array_pop; } public function show(){//打印 foreach($this->queue as $item){ echo $item." "; } echo "
"; }}$deque = new Deque;$deque->addLast;$deque->addFirst;//PHP解决约瑟夫环问题//方法一function joseph_ring{ $arr = range; $i = 0; while{ $i=$i+1; $head = array_shift{ //如果不是则重新压入数组 array_push; } } return $arr[0];}//方法二function joseph_ring2{ $r = 0; for{ $r = %$i; } return $r + 1;}echo "
".joseph_ring."
";echo "
".joseph_ring2."
";

//3、二分查找-递归

$array = array;//冒泡排序思想,前后元素比较function sort_bulldle{ $num = count; for{ $tmp = $array[$i]; for  { if  { $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; } else { break; } } } return $array;}//插入排序思想,就是从第二个元素开始,到最后一个元素都是这个需要排序的元素function sort_bulldle{ for($i=1, $len=count { $tmp = $arr[$i]; for { if { $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; } else { break; } } } return $arr;}//快速排序,找一个基准点把数组分成两组比较function sort_bulldle{ $num = count { return $array; } $base_num = $array[0]; $left_array = array(); $right_array = array(); for { if ($base_num > $array[$i]) { $left_array[] = $array[$i]; }else { $right_array[] = $array[$i]; } } $left_array = sort_bulldle; $right_array = sort_bulldle; return array_merge($left_array, array, $right_array);}
function test { echo $n." "; if; }else{ echo ""; } echo $n." "}test

对需要排序的数组从后往前进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换。这样比较小的数值就将逐渐从后面向前面移动。

以上这篇PHP常用算法和数据结构示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

//二分查找-递归function bin_search{ if{ $mid = intval; }else{ return false; } if{ return $mid; }elseif{ return bin_search($array,$low,$mid-1,$k); }else{ return bin_search($array,$mid+1,$high,$k); }}$arr = array(12, 5, 4, 7, 3, 8, 4, 2, 6, 4, 9);$index = bin_search; //直接输出为空,不解echo;

本文实例总结了PHP常用排序算法。分享给大家供大家参考,具体如下:

这个比如终究的输出结果是

二、快速排序

//4、二分查找-非递归

class bevin{public $public = 'public';private $private = 'private';protected $protected = 'protected';//final $final = 'final';static $static = 'static';function __construct(){ $this->protected = 'change private';}public function setValue{ self::$static = $a;}public function getValue(){ echo $this->private;}function __destruct(){ echo 'asdfsadf';}}class paixu {// 基本排序public function t_sortArray { if && count { for($i=0; $i$array[$key]) { $array[$key] = $array[$key-1]; $array[$key-1] = $v; $status = true; } } } if { return $this->c_sortArray; } else { return $array; }}// 快速排序public function v_sortArray { if || count{ return $array; } if { $m = $array[floor+1]; } else { if { $temp = $array[0]; $array[0] = $array[1]; $array[1] = $temp; } return $array; } $leftarray = array(); $rightarray = array(); foreach { if { $rightarray[] = $v; } if { $leftarray[] = $v; } if { $mid[] = $v; } } $nleftarray = $this->v_sortArray; $nrightarray = $this->v_sortArray; return array_merge($nleftarray,$mid,$nrightarray);}// 直接插入排序public function i_sortArray { if || count{ return $array; } $newarray = array; $temp = 0; foreach { if { if($v>=$newarray[count { $newarray[] = $v; } else { foreach($newarray as $nk=>$nv) { if { $temparray = array(); foreach($newarray as $ck=>$cv) { if { $temparray[$ck] = $cv; } elseif { $temparray[$ck] = $v; $temparray[] = $cv; } else { $temparray[] = $cv; } } $newarray = $temparray; break; } } } } } return $newarray;}}$bevin = new paixu;$array = array;$v = $bevin->t_sortArray;$v = $bevin->c_sortArray;$v = $bevin->v_sortArray;$v = $bevin->i_sortArray;

Array( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5)Array( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5)Array( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5)Array( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5)

2 1 00 1 2

基本思想:

function bin_search($arr,$low,$high,$value) {//$arr 数组; $slow 最小索引; $high 最大索引 $value 查找的值 while { $mid=intval; if{ return $mid; }elseif{ $high=$mid-1; }else{ $low=$mid+1; } } return false; }

function quick_sort { $n=count return $arr; $key=$arr[0]; $left_arr=array; for { if $left_arr[]=$arr[$i]; else $right_arr[]=$arr[$i]; } $left_arr=quick_sort; $right_arr=quick_sort; return array_merge,$right_arr);}

function select_sort { $n=count; for { $k=$i; for { if $k=$j; } if { $temp=$arr[$i]; $arr[$i]=$arr[$k]; $arr[$k]=$temp; } } return $arr;}

function insertSort { $n=count; for { $tmp=$arr[$i]; $j=$i-1; while { $arr[$j+1]=$arr[$j]; $arr[$j]=$tmp; $j--; if break; } } return $arr;}

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php排序算法总结》、《PHP数组操作技巧大全》、《php字符串用法总结》、《php常用函数与技巧总结》、《PHP错误与异常处理方法总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

我解说下,为何输出是这么的

在数组中挑出一个元素作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,通过递归将各子序列分别划分为更小的序列直到所有的序列顺序一致。

希望本文所述对大家PHP程序设计有所帮助。

第一步,履行test,echo 2,然后由于2>0,履行test,
后边还有没来得及履行的echo 2

三、二分查找

第二步,履行test,echo
1,然后由于1>0,履行test,相同后边还有没来得及履行的 echo 1

基本思想:

第三步,履行test,echo 0,
此刻0>0的条件不满意,不在履行test()函数,而是echo
“”,并且履行后边的 echo 0

假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。

此刻函数现已不再调用自个,开端将流程的主控权交回给上一层函数来履行,也即是开端履行刚刚一切test()函数没来得及输出的最终一个echo,0的一层是1也即是输出1
1的上一层是2 也即是输出2 2没有山一层 所以呢 输出的内容即是2 1 00 1 2

四、顺序查找

总结

基本思想:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

从数组的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败。

五、写一个函数,能够遍历一个文件下的所有文件和子文件夹

六、写一个函数,尽可能高效的从一个标准url中取出文件的扩展名

 string 'http'  //'host' => string 'www.sina.com.cn'  //'path' => string '/abc/de/fg.php'  //'query' => string 'id=1'  $file = basename;// basename函数返回路径中的文件名部分 $ext = explode; return $ext[count-1]; } print(getExt('http://www.sina.com.cn/abc/de/fg.html.php?id=1'));?>

七、实现中文字符串截取无乱码的方法

可使用mb_substr,但是需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函
数的问题。

以上这篇PHP面试常用算法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图