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);


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