码迷,mamicode.com
首页 > 编程语言 > 详细

PHP数组基本排序算法和查找算法

时间:2018-02-19 21:46:09      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:有序   基本   middle   style   ddl   shu   保存   查找   条件   

关于PHP中的基础算法,小结一下,也算是本博客的第一篇文章

1.2种排序算法
冒泡排序:
例子:个人见解
	5 6 2 3 7 9

	第一趟
	5 6 2 3 7 9
	5 2 6 3 7 9
	5 2 3 6 7 9
	5 2 3 6 7 9
	5 2 3 6 7  9

	第二趟
	2 5 3 6 7  9
	2 3 5 6 7  9
	2 3 5 6 7  9
	2 3 5 6  7  9

	第三趟
	2 3 5 6  7  9
	2 3 5 6  7  9
	2 3 5  6  7  9

	第四趟
	2 3 5  6  7  9
	2 3  5  6  7  9

	第五趟
     2  3  5  6  7  9 

    两两比较,每一趟中都会确定出最大的数然后放在右边,冒泡速度较慢,但是比较稳定。

 代码方面主要是嵌套的for循环

 代码:

 1 #冒泡排序
 2 #原理两两比较,大的放右边,每次循环会排出一个最大的放在右边
 3 function maopao($arr){
 4     $len=count($arr);
 5     for ($i=0; $i < $len-1; $i++) { 
 6         for ($a=0; $a <$len-1-$i ; $a++) { 
 7             if ($arr[$a]>$arr[$a+1]) {
 8                 $t=$arr[$a];
 9                 $arr[$a]=$arr[$a+1];
10                 $arr[$a+1]=$t;
11             }
12         }
13     }
14     return $arr;
15 
16 }
17 $arr=[5,6,8,1,2,3,7,55,69,23,11];
18 var_dump(maopao($arr));

 

选择排序:
例子:个人见解
	#选择排序
	8 5 6 2 4 7

	第一趟
	5 8 6 2 4 7
	5 8 6 2 4 7
	2 8 6 5 4 7
	2 8 6 5 4 7
	2  8 6 5 4 7

	第二趟

	2  6 8 5 4 7
	2  5 8 6 4 7
	2  4 8 6 5 7
	2  4  8 6 5 7

	第三趟

	2  4  6 8 5 7
	2  4  5 8 6 7
	2  4  5  8 6 7

	第四趟
	2  4  5  6 8 7
	2  4  5  6  8 7

	第五趟
	2  4  5  6  7  8

假设数组中靠左的元素是小的,然后跟右边的元素比较,如果左边的大于右边的就换到左边,每趟都能确定出一个最小值,缺点在于不稳定性,速度快于冒泡排序。
代码:
 1 #选择排序
 2 #那最左边的和右边比较如果大于就换到右边,每趟确定出一个最小值
 3 function xuanze($arr){
 4     $len=count($arr);
 5     for ($i=0; $i <$len-1 ; $i++) { 
 6         //假设当前最左边的元素是最小值,保存下标
 7         $key=$i;
 8         for ($j=$i+1; $j < $len; $j++) { 
 9             //如果左边的大于右边的就保存下标
10             if($arr[$key]>$arr[$j]){
11                 $key=$j;
12             }
13         }
14         //找到最小的值,交换下标
15         $temp=$arr[$key];
16         $arr[$key]=$arr[$i];
17         $arr[$i]=$temp;
18     }
19     return $arr;
20 }
21 $arr=[11,2,3,55,66,99];
22 var_dump(xuanze($arr));

关于排序先写两个,日后跟新~~

1.2种查找算法
顺序查找:
这个比较简单,原理就是从第一个开始比较直到找到,效率比较低,较稳定。
代码:
#选择排序
#存在值返回该值的下标,不存在返回false
function shunxu($arr,$target){
    $len=count($arr);
    for ($i=0; $i <$len ; $i++) { 
        if ($arr[$i]==$target) {
            return $i;
        }
    }
    return false;
}
$arr=[2,5,6,3,8,52,6];
var_dump(shunxu($arr,52));
二分法查找
条件严格,数组必须有序排列,效率较高。
原理:取一个中间值进行和要查找的值比较,假如数组升序排序,值大于要查找的值,然后下标减一

#二分法查找
#选择升序数组
function erfen($arr,$target){
    $len=count($arr)-1;
    $middle=ceil($len/2);
    if ($arr[$middle]==$target) {
        return true;
    }elseif($arr[$middle]>$target){
        for ($i=0; $i <$middle ; $i++) { 
        if ($arr[$i]==$target) {
            return true;
        }
    }
  }else{
      //因为循环的是长度所以得+1
      for ($i=$middle; $i < $len+1 ; $i++) { 
        if ($arr[$i]==$target) {
            return true;
        }
    }
  }
  return false;
}
$arr=[1,2,3,4,5,6,7,10,11];
var_dump(erfen($arr,11));

先写这几个吧,日后在更!

 

 

 

PHP数组基本排序算法和查找算法

标签:有序   基本   middle   style   ddl   shu   保存   查找   条件   

原文地址:https://www.cnblogs.com/bjphp/p/8454416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!