zoukankan      html  css  js  c++  java
  • 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>"; 


  • 相关阅读:
    Activity之间的数据传递
    解析JSON
    使用HTTP协议访问网路
    WebView的初体验
    Alarm机制用于定时服务
    IntentService和Service执行子线程对比
    前台服务
    Android四大组件之服务
    异步消息处理机制,UI更新
    Git学习
  • 原文地址:https://www.cnblogs.com/liuqun/p/12655258.html
Copyright © 2011-2022 走看看