php數組排序算法、查找算法

數組排序算法

冒泡排序

從數組第一個元素開始,從左到右,相鄰的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);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章