";//----------------------------------------//常用的排序算法//---------------------------------------//冒泡排序函数BubbleSort($arr){$长度=计数($arr);如果($length<=1){返回$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;}}}返回$arr;}echo'冒泡排序:';echoimplode('',BubbleSort($arr))."
";//快速排序函数QSort($arr){$length=count($arr);如果($length<=1){返回$arr;}$pivot=$arr[0];//枢轴$left_arr=array();$right_arr=数组();for($i=1;$i<$length;$i++){//注意$i从1开始0是pivotif($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);//合并左半,pivot,右半}echo"快速排序:";echoimplode('',QSort($arr))."
";//选择排序(不稳定)函数SelectSort($arr){$length=count($arr);如果($length<=1){返回$arr;}for($i=0;$i<$length;$i++){$min=$i;对于($j=$i+1;$j<$length;$j++){如果($arr[$j]<$arr[$min]){$min=$j;}}if($i!=$min){$tmp=$arr[$i];$arr[$i]=$arr[$min];$arr[$min]=$tmp;}}返回$arr;}echo"选择排序:";echoimplode('',SelectSort($arr))."
";//插入排序函数InsertSort($arr){$length=cou新台币($arr);如果($length<=1){返回$arr;}for($i=1;$i<$length;$i++){$x=$arr[$i];$j=$i-1;while($x<$arr[$j]&&$j>=0){$arr[$j+1]=$arr[$j];$j--;}$arr[$j+1]=$x;}返回$arr;}echo'插入排序:';echoimplode('',InsertSort($arr))."
";//--------------------------------------//常用搜索算法//--------------------------------------//二分搜索函数binary_search($arr,$low,$high,$key){while($low<=$high){$mid=intval(($low+$high)/2);如果($key==$arr[$mid]){返回$mid+1;}elseif($key<$arr[$mid]){$high=$mid-1;}elseif($key>$arr[$mid]){$low=$mid+1;}}返回-1;}$键=6;echo"二进制搜索{$key}的位置:";echobinary_search(QSort($arr),0,8,$key);//顺序搜索函数SqSearch($arr,$key){$length=count($arr);for($i=0;$i<$length;$i++){if($key==$arr[$i]){返回$i+1;}}返回-1;}$键=8;echo"
普通搜索{$key}的位置:";echoSqSearch($arr,$key);//----------------------------------------//常用数据结构//------------------------------------//删除线性表(数组实现)函数delete_array_element($arr,$pos){$length=count($arr);if($pos<1||$pos>$length){return"错误删除位置!";}for($i=$pos-1;$i<$length-1;$i++){$arr[$i]=$arr[$i+1];}array_pop($arr);返回$arr;}$pos=3;echo"
删除位置{$pos}的元素后:";echoimplode('',delete_array_element($arr,$pos))."
";/***ClassNode*PHP模拟链表的基本操作*/classNode{public$data='';公共$下一个=空;}//初始化函数init($linkList){$linkList->data=0;//用来记录链表的长度$linkList->下一个=空;}//head插值法创建链表函数createHead(&$linkList,$length){for($i=0;$i<$length;$i++){$newNode=newNode();$newNode->data=$i;$newNode->next=$linkList->next;//因为对象本身在PHP中是一个引用,所以不再可用"&"$linkList->next=$newNode;$链接列表->数据++;}}//尾插入法创建链表函数createTail(&$linkList,$length){$r=$linkList;for($i=0;$i<$length;$i++){$newNode=新节点();$newNode->data=$i;$newNode->next=$r->next;$r->next=$newNode;$r=$新节点;$链接列表->数据++;}}//in在指定位置插入指定元素functioninsert($linkList,$pos,$elem){if($pos<1&&$pos>$linkList->data+1){echo"插入位置是错的!”;}$p=$链接列表;对于($i=1;$i<$pos;$i++){$p=$p->下一个;}$newNode=新节点();$newNode->data=$elem;$新Node->next=$p->next;$p->next=$newNode;}//删除指定位置的元素functiondelete($linkList,$pos){if($pos<1&&$pos>$linkList->data+1){echo"位置不存在!";$p=$链接列表;对于($i=1;$i<$pos;$i++){$p=$p->下一个;}$q=$p->下一个;$p->下一个=$q->下一个;取消设置($q);$linkList->数据--;}//输出链表数据functionshow($linkList){$p=$linkList->next;while($p!=null){echo$p->data."";$p=$p->下一个;}回声'
';}$linkList=新节点();init($linkList);//初始化createTail($linkList,10);//尾插入方法创建链表show($linkList);//打印出链表insert($linkList,3,'a');//插入显示($linkList);delete($linkList,3);//删除显示($linkList);/***ClassStack*使用PHP模拟序列栈的基本操作*/classStack{//使用默认值直接初始化栈,也可以用构造函数初始化栈private$top=-1;私人$maxSize=5;私人$堆栈=数组();//压入栈publicfunctionpush($elem){if($this->top>=$this->maxSize-1){echo"栈已满!
";返回;}$this->top++;$this->stack[$this->top]=$elem;}//出栈publicfunctionpop(){if($this->top==-1){echo"栈是空的!";返回;$elem=$this->stack[$this->top];取消设置($this->堆栈[$this->top]);$this->top--;返回$元素;}//打印栈publicfunctionshow(){for($i=$this->top;$i>=0;$i--){echo$this->stack[$i]."";}回声“
”;}}$stack=newStack();$堆栈->推(3);$堆栈->推(5);$堆栈->推(8);$堆栈->推(7);$堆栈->推(9);$堆栈->推(2);$堆栈->显示();$堆栈->弹出();$堆栈->弹出();$堆栈->弹出();$堆栈->展示();/***ClassDeque*使用PHP实现双向队列*/classDeque{private$queue=array();publicfunctionaddFirst($item){//头入队列array_unshift($this->queue,$item);}publicfunctionaddLast($item){//尾队列array_push($this->queue,$item);}publicfunctionremoveFirst(){//headqueuearray_shift($this->queue);}publicfunctionremoveLast(){//尾队列array_pop($this->queue);}publicfunctionshow(){//printforeach($this->queueas$item){echo$item."";}回声“
”;}}$deque=newDeque();$deque->addFirst(2);$deque->addLast(3);$deque->addLast(4);$双端队列->addFirst(5);$deque->show();//PHP解决约瑟夫环问题//方法一functionjoseph_ring($n,$m){$arr=range(1,$n);$i=0;while(count($arr)>1){$i=$i+1;$head=array_shift($arr);如果($i%$m!=0){//如果没有,再次压入数组array_push($arr,$head);}}返回$arr[0];}//方法二functionjoseph_ring2($n,$m){$r=0;对于($i=2;$i<=$n;$i++){$r=($r+$m)%$i;}返回$r+1;}echo"
".joseph_ring(60,5)."
";echo"
".joseph_ring2(60,5)."
";
