數組排序算法冒泡排序
從數組第一個元素開始,從左到右,相鄰的2個元素比較大小:如果左邊的比右邊的大,則交換位置。
邏輯描述:
1.需要進行n-1趟比較過程
2.每一趟的比較都比前一趟少比一次,第一趟需要比較n-1次
3.每趟比較,從數組的開頭開始,跟緊鄰元素比較,並進行交換(需要的時候)
示例:
$arr2 = array(5,15,3,6,9,77); $len=count($arr2); for ($i=0; $i <$len-1 ; $i++) { for($k=0; $k <$len-1-$i ; $k++) { if($arr2[$k]>$arr2[$k+1]) { $temp=$arr2[$k]; $arr2[$k]=$arr2[$k+1]; $arr2[$k+1]=$temp; } } }
選擇排序
每一次取得數組中的最大值及其下標,與數組的最後一項交換(倒數第二項。。。)
邏輯描述:
1.進行n-1趟比較過程
2.每一趟要找的數據的個數都比前一趟少一個,第一項n個
3.每次找出最大值所在的項,和要與之進行交換的項的位置,依次減一,第一次的位置爲n-1
示例:
$arr2 = array(5,15,3,6,9,77);
$leng=count($arr2);
for ($i=0; $i <$leng-1 ; $i++) {
$max=$arr2[0];
$maxkey=0;
for($k=0; $k <$leng-$i ; $k++) {
if($arr2[$k]>$max) {
$max=$arr2[$k];
$maxkey=$k;
}
}
$temp=$arr2[$maxkey];
$arr2[$maxkey]=$arr2[$leng-1-$i];
$arr2[$leng-1-$i]=$temp;
}
數組的查找算法
找出某個數組中,是否存在某個值(數據)
順序查找:遍歷數組。一個一個判斷,如果相等,就表示有,然後退出就ok
二分查找算法
1.針對的是索引數組
2.針對的是以及排好序的數組
示例:
//二分法查找
$a=array(1,3,5,9,12,19,26,28,33,35,39,45,49,52,59,62,64,69,78,99);
$search=33;
$len=count($a);
function binary_search($arr,$s,$begin,$end){
$mid=floor(($begin+$end)/2);
$mid_value=$arr[$mid];
if ($mid_value==$s) {
return true;
}else if ($mid_value>$s) {
if ($begin>$mid-1) {
return false;
}
$re=binary_search($arr,$s,$begin,$mid-1);
}else{
if ($mid+1>$end) {
return false;
}
$re=binary_search($arr,$s,$mid+1,$end);
}
return $re;
}
$v1=binary_search($a,$search,0,$len-1);
echo "結果爲:";
echo var_dump($v1);