PHP常用算法和数据结构示例(必看篇)
发布:smiling 来源: PHP粉丝网 添加日期:2018-08-09 09:44:11 浏览: 评论:
-
-
-
-
-
-
- header("content-type:text/html;charset=utf-8");
- $arr=array(3,5,8,4,9,6,1,7,2);
- echoimplode(" ",$arr)."<br>";
-
-
-
-
- functionBubbleSort($arr){
- $length=count($arr);
- if($length<=1){
- return$arr;
- }
- for($i=0;$i<$length;$i++){
- for($j=$length-1;$j>$i;$j--){
- if($arr[$j]<$arr[$j-1]){
- $tmp=$arr[$j];
- $arr[$j] =$arr[$j-1];
- $arr[$j-1] =$tmp;
- }
- }
- }
- return$arr;
- }
- echo'冒泡排序:'
- echoimplode(' ',BubbleSort($arr))."<br>";
-
-
- functionQSort($arr){
- $length=count($arr);
- if($length<=1){
- return$arr;
- }
- $pivot=$arr[0];
- $left_arr=array();
- $right_arr=array();
- for($i=1;$i<$length;$i++){
- if($arr[$i]<=$pivot){
- $left_arr[] =$arr[$i];
- }else{
- $right_arr[] =$arr[$i];
- }
- }
- $left_arr= QSort($left_arr);
- $right_arr= QSort($right_arr);
- returnarray_merge($left_arr,array($pivot),$right_arr);
- }
- echo"快速排序:";
- echoimplode(' ',QSort($arr))."<br>";
-
-
- functionSelectSort($arr){
- $length=count($arr);
- if($length<=1){
- return$arr;
- }
- for($i=0;$i<$length;$i++){
- $min=$i;
- for($j=$i+1;$j<$length;$j++){
- if($arr[$j]<$arr[$min]){
- $min=$j;
- }
- }
- if($i!=$min){
- $tmp=$arr[$i];
- $arr[$i] =$arr[$min];
- $arr[$min] =$tmp;
- }
- }
- return$arr;
- }
- echo"选择排序:";
- echoimplode(' ',SelectSort($arr))."<br>";
-
-
- functionInsertSort($arr){
- $length=count($arr);
- if($length<=1){
- return$arr;
- }
- for($i=1;$i<$length;$i++){
- $x=$arr[$i];
- $j=$i-1;
- while($x<$arr[$j] j="">=0){<!--$arr[$j]-->
- $arr[$j+1] =$arr[$j];
- $j--;
- }
- $arr[$j+1] =$x;
- }
- return$arr;
- }
- echo'插入排序:'
- echoimplode(' ',InsertSort($arr))."<br>";
-
-
-
-
- functionbinary_search($arr,$low,$high,$key){
- while($low<=$high){
- $mid=intval(($low+$high)/2);
- if($key==$arr[$mid]){
- return$mid+1;
- }elseif($key<$arr[$mid]){
- $high=$mid-1;
- }elseif($key>$arr[$mid]){
- $low=$mid+1;
- }
- }
- return-1;
- }
- $key= 6;
- echo"二分查找{$key}的位置:";
- echobinary_search(QSort($arr),0,8,$key);
-
-
- functionSqSearch($arr,$key){
- $length=count($arr);
- for($i=0;$i<$length;$i++){
- if($key==$arr[$i]){
- return$i+1;
- }
- }
- return-1;
- }
- $key= 8;
- echo"<br>顺序常规查找{$key}的位置:";
- echoSqSearch($arr,$key);
-
-
-
-
- functiondelete_array_element($arr,$pos){
- $length=count($arr);
- if($pos<1 pos="">$length){<!--1-->
- return"删除位置出错!";
- }
- for($i=$pos-1;$i<$length-1;$i++){
- $arr[$i] =$arr[$i+1];
- }
- array_pop($arr);
- return$arr;
- }
- $pos= 3;
- echo"<br>除第{$pos}位置上的元素后:";
- echoimplode(' ',delete_array_element($arr,$pos))."<br>";
-
-
-
-
-
- classNode{
- public$data=''
- public$next= null;
- }
-
- functioninit($linkList){
- $linkList->data = 0;
- $linkList->next = null;
- }
-
- functioncreateHead(&$linkList,$length){
- for($i=0;$i<$length;$i++){
- $newNode=newNode();
- $newNode->data =$i;
- $newNode->next =$linkList->next;
- $linkList->next =$newNode;
- $linkList->data++;
- }
- }
-
- functioncreateTail(&$linkList,$length){
- $r=$linkList;
- for($i=0;$i<$length;$i++){
- $newNode=newNode();
- $newNode->data =$i;
- $newNode->next =$r->next;
- $r->next =$newNode;
- $r=$newNode;
- $linkList->data++;
- }
- }
-
- functioninsert($linkList,$pos,$elem){
- if($pos<1 pos="">$linkList->data+1){<!--1-->
- echo"插入位置错误!";
- }
- $p=$linkList;
- for($i=1;$i<$pos;$i++){
- $p=$p->next;
- }
- $newNode=newNode();
- $newNode->data =$elem;
- $newNode->next =$p->next;
- $p->next =$newNode;
- }
-
- functiondelete($linkList,$pos){
- if($pos<1 pos="">$linkList->data+1){<!--1-->
- echo"位置不存在!";
- }
- $p=$linkList;
- for($i=1;$i<$pos;$i++){
- $p=$p->next;
- }
- $q=$p->next;
- $p->next =$q->next;
- unset($q);
- $linkList->data--;
- }
-
- functionshow($linkList){
- $p=$linkList->next;
- while($p!=null){
- echo$p->data." ";
- $p=$p->next;
- }
- echo'<br>'
- }
-
- $linkList=newNode();
- init($linkList);
- createTail($linkList,10);
- show($linkList);
- insert($linkList,3,'a');
- show($linkList);
- delete($linkList,3);
- show($linkList);
-
-
-
-
-
- classStack{
-
- private$top= -1;
- private$maxSize= 5;
- private$stack=array();
-
-
- publicfunctionpush($elem){
- if($this->top >=$this->maxSize-1){
- echo"栈已满!<br>";
- return;
- }
- $this->top++;
- $this->stack[$this->top] =$elem;
- }
-
- publicfunctionpop(){
- if($this->top == -1){
- echo"栈是空的!";
- return;
- }
- $elem=$this->stack[$this->top];
- unset($this->stack[$this->top]);
- $this->top--;
- return$elem;
- }
-
- publicfunctionshow(){
- for($i=$this->top;$i>=0;$i--){
- echo$this->stack[$i]." ";
- }
- echo"<br>";
- }
- }
-
- $stack=newStack();
- $stack->push(3);
- $stack->push(5);
- $stack->push(8);
- $stack->push(7);
- $stack->push(9);
- $stack->push(2);
- $stack->show();
- $stack->pop();
- $stack->pop();
- $stack->pop();
- $stack->show();
-
-
-
-
-
- classDeque{
- private$queue=array();
- publicfunctionaddFirst($item){
- array_unshift($this->queue,$item);
- }
- publicfunctionaddLast($item){
- array_push($this->queue,$item);
- }
- publicfunctionremoveFirst(){
- array_shift($this->queue);
- }
- publicfunctionremoveLast(){
- array_pop($this->queue);
- }
- publicfunctionshow(){
- <a href="/tags.php/foreach/" target="_blank">foreach</a>($this->queueas$item){
- echo$item." ";
- }
- echo"<br>";
- }
- }
- $deque=newDeque();
- $deque->addFirst(2);
- $deque->addLast(3);
- $deque->addLast(4);
- $deque->addFirst(5);
- $deque->show();
-
-
-
- functionjoseph_ring($n,$m){
- $arr= range(1,$n);
- $i= 0;
- while(count($arr)>1){
- $i=$i+1;
- $head=array_shift($arr);
- if($i%$m!= 0){
- array_push($arr,$head);
- }
- }
- return$arr[0];
- }
-
- functionjoseph_ring2($n,$m){
- $r= 0;
- for($i=2;$i<=$n;$i++){
- $r= ($r+$m)%$i;
- }
- return$r+ 1;
- }
- echo"<br>".joseph_ring(60,5)."<br>";
- echo"<br>".joseph_ring2(60,5)."<br>";
分享到: