<?php$arr = array(20,4,2,-1,-34,0,50,6,19);#冒泡排序function bubbleSort($arr){$flag = 0;for($i=0;$i<count($arr)-1;$i++){for($j=0;$j<count($arr)-1-$i;$j++){if($arr[$j] > $arr[$j+1]){$temp = $arr[$j+1];$arr[$j+1] = $arr[$j];$arr[$j] = $temp;$flag = 1;}}//最佳化if(!$flag){//已經有序break;}$flag=0;}return $arr;}echo implode(',',bubbleSort($arr)).'<br>';#選擇排序function selectSort($arr){for($i=0;$i<count($arr)-1;$i++){//假設$i就是最小的$minVal = $arr[$i];//$i是最小的下標$minIndex = $i;for($j=$i+1;$j<count($arr);$j++){//假設錯誤if($minVal > $arr[$j]){$minVal = $arr[$j];$minIndex = $j;}}//最後交換$temp = $arr[$i];$arr[$i] = $arr[$minIndex];$arr[$minIndex] = $temp;}return $arr;}echo implode(',',selectSort($arr)).'<br>';#插入排序function insertSort($arr){//先預設下標為0的已經是有序的for($i=1;$i<count($arr);$i++){//準備插入的資料$insertVal = $arr[$i];//待比較的下標,也就是前面的$insertIndex = $i-1;//如果滿足下麵條件,說明位置還未找到while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){//同時把數後面移動一下$arr[$insertIndex+1] = $arr[$insertIndex];$insertIndex--;}//插入$arr[$insertIndex+1] = $insertVal;}return $arr;}echo implode(',',insertSort($arr)).'<br>';#快速排序(遞迴)function quickSort($left,$right,&$arr){$l = $left;$r = $right;$pivot = $arr[($left+$right)/2];$temp=0;while($l<$r){while($arr[$l]<$pivot)$l++;while($arr[$r]>$pivot)$r--;if($l>=$r) break;$temp=$arr[$l];$arr[$l]=$arr[$r];$arr[$r]=$temp;if($arr[$l]==$pivot)--$r;if($arr[$r]==$pivot)++$l;}if($l==$r){$l++;$r--;}if($left<$r) quickSort($left,$r,$arr);if($right>$l)quickSort($l,$right,$arr);//return $arr;}quickSort(0,count($arr)-1,$arr);echo implode(',',$arr).'<br>';#二分尋找function binarySearch(&$arr,$findVal,$l,$r){//停止條件if($l>$r){return;}//找到中間的下標$midIndex = round(($r+$l)/2);if($findVal>$arr[$midIndex]){binarySearch($arr,$findVal,$midIndex+1,$r);}elseif($findVal<$arr[$midIndex]){binarySearch($arr,$findVal,$l,$midIndex-1);}else{echo $midIndex;}}binarySearch($arr,0,0,count($arr)-1);
都已經親自測試過,可以正常運行!
本文出自 “phper” 部落格,請務必保留此出處http://janephp.blog.51cto.com/4439680/1287597