数组排序算法冒泡排序
从数组第一个元素开始,从左到右,相邻的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);