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>"; 
 
	
		
        
                
                
		
         
        
        
		
           分享到: