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

 

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

个人实例很好理解  由于前几天面试看了下别人写的 网上搜的 总以为不怎么样,因此本身写了下整理了下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);
}
$arr = quickSort($arr);
print_r($arr);

 

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>"; 
相关文章
相关标签/搜索