冒泡排序:
效果:
原理:
简单来说就是两两比较大小一个外层循环里面套一个内层循环
将大的数放在最后,通过循环实现排序
代码实现:
$arr=array(1,43,54,62,21,66,32,78,36,76,39);
function getpao($arr)
{
$len=count($arr);
//设置一个空数组 用来接收冒出来的泡
//该层循环控制 需要冒泡的轮数
for($i=1;$i<$len;$i++)
{ //该层循环用来控制每轮 冒出一个数 需要比较的次数
for($k=0;$k<$len-$i;$k++)
{
if($arr[$k]>$arr[$k+1])
{
$tmp=$arr[$k+1];
$arr[$k+1]=$arr[$k];
$arr[$k]=$tmp;
}
}
}
return $arr;
}
print_r(getpao($arr));
结果:
Array( [0] => 1 [1] => 21 [2] => 32 [3] => 36 [4] => 39 [5] => 43 [6] => 54 [7] => 62 [8] => 66 [9] => 76 [10] => 78)
快速排序:
示例图:
原理:
重点就是递归
选中一个元素为根,其他元素通过与选中元素对比大小,放入对应的数组中,在递归调用本身将放好的数组进行排序,最后进行合并,从而达到排序的效果
代码:
$arr=array(1,43,54,62,21,66,32,78,36,76,39);
function quick_sort($arr) {
//先判断是否需要继续进行
$length = count($arr);
if($length <= 1) {
return $arr;
}
//如果没有返回,说明数组内的元素个数 多余1个,需要排序
//选择一个标尺
//选择第一个元素
$base_num = $arr[0];
//遍历 除了标尺外的所有元素,按照大小关系放入两个数组内
//初始化两个数组
$left_array = array();//小于标尺的
$right_array = array();//大于标尺的
for($i=1; $i<$length; $i++) {
if($base_num > $arr[$i]) {
//放入左边数组
$left_array[] = $arr[$i];
} else {
//放入右边
$right_array[] = $arr[$i];
}
}
//再分别对 左边 和 右边的数组进行相同的排序处理方式
//递归调用这个函数,并记录结果
$left_array = quick_sort($left_array);
$right_array = quick_sort($right_array);
//合并左边 标尺 右边
return array_merge($left_array, array($base_num), $right_array);
}
$li = quick_sort($arr);
print_r($li);结果:
y( [0] => 1 [1] => 21 [2] => 32 [3] => 36 [4] => 39 [5] => 43 [6] => 54 [7] => 62 [8] => 66 [9] => 76 [10] => 78)
二分查找(二叉树也时同样的原理)
就是将排序好的数据通过对半来更加快速的查找到目标
二分查找:
http://www.tuicool.com/articles/2MbAR3q
http://blog.youkuaiyun.com/xzjxylophone/article/details/4714326
1,2,3,4,5,6,7
我现在要查找7
我先取出中间数 4
判断下是不是要找的数字,发现小了
就去右边查找
然后取出右边的所有的数
取出她们几个的中间数 6
发现还小了
继续找右边的数组
找到7了 ok了!!!
最差的一种情况就是这个数字不存在 ====
1 <?php
2 #二分查找
3 function binarySearch(Array $arr, $target) {
4 $low = 0;
5 $high = count($arr) - 1;
6
7 while($low <= $high) {
8 $mid = floor(($low + $high) / 2);
9 #找到元素
10 if($arr[$mid] == $target) return $mid;
11 #中元素比目标大,查找左部
12 if($arr[$mid] > $target) $high = $mid - 1;
13 #重元素比目标小,查找右部
14 if($arr[$mid] < $target) $low = $mid + 1;
15 }
16
17 #查找失败
18 return false;
19 }
20
21 $arr = array(1, 3, 5, 7, 9, 11);
22 $inx = binarySearch($arr, 1);
23 var_dump($inx);
24 ?>
18万+

被折叠的 条评论
为什么被折叠?



