zoukankan      html  css  js  c++  java
  • php实现快速排序和冒泡排序

    快速排序

    实现思路:把第一个元素作为标记,依次判断后续的值,如果小于它则放在左边,如果大于它则放右边,同理把左右两部分看成一个整体一直递归,最后再数组拼接起来

    它的最优时间复杂度为O(nlogn)【以标记元素为中心,正好每次左右都能均匀分配】,最糟糕时间复杂度为O(n^2)【标记元素每次是最大或最小值,使所有数都划分到一边】

    function quickSort($arr)
    {
        $count = count($arr);   //统计出数组的长度
        if ($count <= 1) { // 如果个数为空或者1,则原样返回数组
            return $arr;
        }
        $index = $arr[0]; // 把第一个元素作为标记
        $left = [];    //定义一个左空数组 
        $right = [];    //定义一个有空数组
        for ($i = 1; $i < $count; $i++) {   //从数组的第二数开始与第一个标记元素作比较
            if ($arr[$i] < $index) {        //如果小于第一个标记元素则放进left数组
                $left[] = $arr[$i];
            } else {                        //如果大于第一个标记元素则放进right数组
                $right[] = $arr[$i];
            }
        }
        $left  = quickSort($left);      //把left数组再看成一个新参数,再递归调用,执行以上的排序
        $right = quickSort($right);     //把right数组再看成一个新参数,再递归调用,执行以上的排序
        return array_merge($left, [$arr[0]], $right);   //最后把每一次的左数组、标记元素、右数组拼接成一个新数组
    }
    
    $arrtest=[12,43,54,33,23,14,44,53,10,3,56]; //测试数组
    $res=quickSort($arrtest);      
    var_dump($res); 
    

    冒泡排序

    实现思路:每次从数组里面选出一个最大值,一直递归

    它的最优时间复杂度为O(n)【正序,数组排好情况下】,最糟糕时间复杂度为O(n^2)【反序:数组排序刚好相反】

    function bubbleSort($arr)
    {
        $count = count($arr);       //统计出数组的长度
        for ($i = 1; $i < $count; $i++) {       //控制需要排序的轮数,该例子共需要比较10轮
            for ($j = 0; $j < $count - $i; $j++) {  //控制每一轮需要比较的次数,每轮选出最大的一个值放在最后
                if ($arr[$j] > $arr[$j+1]) {        
                    $temp = $arr[$j];           //通过$temp介质把大的值放在后面
                    $arr[$j] = $arr[$j+1];
                    $arr[$j+1] = $temp;
                }
            }
        }
        return $arr;       //返回最终结果
    }
    
    
    $arrtest=[12,43,54,33,23,14,44,53,10,3,56]; //测试数组
    $res=bubbleSort($arrtest);      
    var_dump($res);     
    

      

  • 相关阅读:
    hadoop再次集群搭建(3)-如何选择相应的hadoop版本
    48. Rotate Image
    352. Data Stream as Disjoint Interval
    163. Missing Ranges
    228. Summary Ranges
    147. Insertion Sort List
    324. Wiggle Sort II
    215. Kth Largest Element in an Array
    快速排序
    280. Wiggle Sort
  • 原文地址:https://www.cnblogs.com/legendheng/p/9115981.html
Copyright © 2011-2022 走看看