1.冒泡排序
算法重復(fù)的訪問(wèn)要排的數(shù)列,一次比較兩個(gè)元素,如果順序錯(cuò)誤就把他們糾正過(guò)來(lái),
走訪數(shù)列的工作重復(fù)的進(jìn)行,直到?jīng)]有在需要交換
function bubbleSort($arr){
$len=count($arr);
for($i=0;$i<$len-1;$i++){
for($j=0;$j<len-1-$i;$j++){
if($arr[$j]>$arr[$k+1]){
$tmp=$arr[$k+1];
$arr[$k+1]=$arr[$1];
$arr[$k]=$tmp;
}
}
}
return $arr;
}
2.快速排序
從數(shù)列中挑選一個(gè)數(shù)作為基準(zhǔn)元素,通常選擇第一個(gè)或者最后一個(gè)元素
掃描數(shù)列,以基準(zhǔn)元素為比較對(duì)象,把數(shù)列分成兩個(gè)區(qū),規(guī)則是:小的移動(dòng)在基準(zhǔn)元素的前面,大的移動(dòng)在后面,相等的前后都可以。分區(qū)完成以后,基準(zhǔn)元素就處于數(shù)列中間位置
然后用同樣的方法,遞歸的排列劃分的兩部分
function quickSort($arr){
$len=count($arr);
if($len<1){
return false;
}
//選擇第一個(gè)元素作為基準(zhǔn)元素
$middle = $arr[0];
//初始化小于中間的數(shù)組
$left=array();
//初始化大于中間的數(shù)組
$right=array();
for($i=0; $i<count($arr);$i++){
if( $middle < $arr[$i] ){
//大于中間的值
$right[]=$a[$i];
} else{
//小于中間的值
$left[]=$a[$i];
}
}
//遞歸排序
$left=quickSort($left);
$right=quickSort($right);
//合并排序的數(shù)據(jù)
return array_merge($left,array($middle),$right);
}
二分查找
二分查找算法也叫對(duì)半查找算法,二分查找的思想非常簡(jiǎn)單,有點(diǎn)類似分治思想
二分查找針對(duì)的是一個(gè)有序的數(shù)據(jù)集合,每次都通過(guò)跟中間元素對(duì)比
將帶查找的區(qū)間縮小為之前的一半,直到查找到指定元素,或者區(qū)間被縮小為0
function biarySearch($arr,$findVal){
$start=0;
$end=count($arr)-1;
while($start<=$end){
$middle=intavl(($start+$end)/2);
if($arr[$middle]>$findVal){
//查找的數(shù)比中間數(shù)小,所以在左邊
//因?yàn)?middle已經(jīng)對(duì)比過(guò)了,這里需要減1
$end =$middle-1;
}elseif($arr[$middle]<$findVal){
//查找的數(shù)比中間的數(shù)大,所以在右邊
//因?yàn)?middle已經(jīng)對(duì)比過(guò)了,這一需要加1
$start=$middle+1;
}else{
//找到了
return $middle;
}
}
//未找到
return -1;
}