php算法 快速排序 选择算法 冒泡算法

顺序依次为  快速排序  --》选择排序 ---》冒泡算法 

我的实例很好理解  因为前几天面试看了下别人写的 网上搜的 总觉得不怎么样,所以自己写了下整理了下

1. 快速排序


<?php
//快速排序是个十分有效的高效率算法,
//其思想是先选一个标尺,用它把整个队列过一遍筛选,以保证其他
//左边的元素都不大于大,其他右边的元素都不小于它
$arr = array(19,8,17,16,5);
function quickSort($arr){ //获取数组长度 $length = count($arr); //判断长度是否需要继续二分比较 if($length<=1){ return $arr; } //定义基准元素 $base = $arr[0]; //定义两个空数组,用于存放和基准元素的比较后的结果 $left = []; $right = []; //遍历数组 for($i=1;$i<$length;$i++){ //和基准元素作比较 if($arr[$i]>$base){ $right[] = $arr[$i]; }else{ $left[] = $arr[$i]; } } //然后递归分别处理left和right $left = quickSort($left); $right =quickSort($right); //合并 return array_merge($left,[$base],$right);}

2选择排序

2. 选择排序

算法描述

假设实现升序:

① 在每趟中,假设一个元素是最小值(有可能不是真正的),记录此时的下标

② 使用该元素(下标不能取到最大下标)与剩下的各个元素(右侧的,能取到最大下标)比较:找到更小值,则记录对应元素下标;

③ 使用每次找到的(已知的)最小值与剩下的元素进行比较,继续查找更小的值

④ 本趟比较完成,将假设的最小值,与真正的最小值元素交换位置

⑤ 所有比较结束,则返回数组

<?php
$arr = array(19,8,17,16,5);

echo "<pre>";
//未排序之前
print_r($arr);
echo  "</pre>";
echo  "<hr>";

//选择排序  升序
function select($arr){
   //计算下标的范围
   $n = count($arr);
    //最大的下标是$n-1; 

   //假设最小值(左侧,下标比较小的)与剩下的元素(右侧的元素,比假设的最小值下标至少大1)的逐一比较
   for($i=0;$i<$n-1;$i++){
      //假设一个元素为最小值
      $index = $i;

      for($j=$i+1;$j<$n;$j++){
         if($arr[$index]>$arr[$j]){
            //index 的值被覆盖
            //已知的最小值与剩下的元素比较
            $index = $j;
         }
      }

      //以上的for循环执行完毕,相当于本趟执行完
      //找到了一个最小值
      
      //假设的最小值$arr[$i]
      //与找到的最小值交换位置$arr[$index]
      $tem = $arr[$i]; //初始假设的最小值
      $arr[$i] = $arr[$index]; //真正的最小值 $Index 不可以使用  (内层for循环执行完,此刻$j 为$len-1)
      $arr[$index] = $tem;
   }
   return $arr;
}
$arr = select($arr);
print_r($arr);

3. 冒泡算法排序

<?php
$arr = array(19,8,17,16,5);

echo "<pre>";
//未排序之前
print_r($arr);
echo  "</pre>";
echo  "<hr>";

/**
 * 冒泡排序,较大的泡泡排在上面,对应的数组中,为较大的元素放在数组的末尾,没糖循环中,通过两两比较,将较大的元素放在右侧
 *
 * 第几轮  外层循环的次数,数组的长度-1;
 * 内层循环:比较次数,长度-1-第几轮
 * @var [type]
 */
$n = count($arr);
//for 外层循环
for ($i=0; $i <$n-1 ; $i++) {
    //内层循环,每一步比上一次少一次比较
    for ($j=0; $j <$n-1-$i ; $j++) {
        if($arr[$j]>$arr[$j+1]){
            $tem = $arr[$j];
            $arr[$j] = $arr[$j+1];
            $arr[$j+1] = $tem;
        }
    }
}

echo "<pre>";
//   冒泡排序之后
print_r($arr);
echo  "</pre>";
echo  "<hr>"; 


文章来源: php算法 快速排序 选择算法 冒泡算法

人吐槽 人点赞

猜你喜欢

发表评论

用户名: 密码:
验证码: 匿名发表

你可以使用这些语言

查看评论:php算法 快速排序 选择算法 冒泡算法