zoukankan      html  css  js  c++  java
  • 排序

    效率比较:冒泡<选择<插入<快速

    4:快速排序


    /**

     * 随便取一个数,每循环一次则把比他小的放到左边,比他大的放到右边,递归完成
     * @param array $seq

     * @return array
     
    */
    function quicksort($seq) {
        if (count($seq) > 1) {
            $k = $seq[0];
            $x = array();
            $y = array();
            $_size = count($seq);      //do not use count($seq) in loop for.
            for ($i=1; $i<$_size$i++) {
                if ($seq[$i] <= $k) {
                    $x[] = $seq[$i];
                } else {
                    $y[] = $seq[$i];
                }
            }
            $x = quicksort($x);
            $y = quicksort($y);
            return array_merge($xarray($k), $y);
        } else {
            return $seq;
        }
    }

    3:插入排序
    $arr = array(3,2,1);
    //把数组的前半部分看做是有序的,后面的不断的往前面插入
    function insert_sort(&$arr)
    {
        //先默认下标为0 这个数已经是有序
        for($i=1;$i<count($arr);$i++)
        {
            //$insertValue 是准备插入的数
            $insertValue = $arr[$i];
            //先准备和$insertIndex比较
            $inserIndex = $i-1;
            
            //如果满足这个条件,说明我们没有找到合适的位置、
            
            while($inserIndex>=0 && $insertValue<$arr[$inserIndex])
            {
                //同时把数相应往后面移动
                $arr[$inserIndex+1] = $arr[$inserIndex];
                $inserIndex--;
            }
            
            //插入(这时就给$insertValue找到适当的位置)
            $arr[$inserIndex+1] = $insertValue;//之所以+1 是因为 $inserIndex 是插入的前一个数,即每次和他比较的那个数
        }
    }

    insert_sort($arr);

    print_r($arr);

    2:选择排序

    $arr = array(1,2,3);
    /**
     * 取一个数依次和后面的做比较,记录本次的最小值,然后交换位置
     * 
     
    */
    function select_sort(&$arr)
    {
        $nums = count($arr)-1;//外层循环次数
        $temp = 0;//交换变量用的临时变量
        for($i=0;$i<$nums;$i++)
        {
            $minValue = $arr[$i];//假设$i就是最小数
            $minIndex = $i;     //记录我认为的最小数的下标
            //每排好一个,以后就可以少循环一回

            for($j=$i+1;$j<$nums;$j++)
            {
                if($minValue>$arr[$j])
                {
                    $minIndex = $j;
                    $minValue = $arr[$j];
                }
            }
            
            //交换位置
            $temp = $arr[$i];
            $arr[$i] = $arr[$minIndex];
            $arr[$minIndex] = $temp;
        }
    }

    select_sort($arr);

    print_r($arr); 

    1.冒泡排序

    $arr = array(3,2,1);
    //外层每循环一次则找出一个最大值,放到后面,所以里层的循环就可以减少一次

    function bubble_sort(&$arr)
    {
       $flag = false;

       $nums = count($arr)-1;//外层循环次数$temp = 0;//变量交换位置
       for($i=0;$i<$nums;$i++)
        {
            //每排好一个,以后就可以少循环一回
            for($j=0;$j<$nums-$i;$j++)
            {
                if($arr[$j]>$arr[$j+1])
                {
                    //交换位置
                    $temp = $arr[$j];
                    $arr[$j] = $arr[$j+1];
                    $arr[$j+1] = $temp;

                    $flag = true;//以次来判断是否进入过次层,如果没有进入过,说明本来就是个有序的,无需进行排序了

                }
            }

            if(!$flag){
                //已经排好了
                break;
            }else{
                $flag = false;
            }

        }
    }

    bubble_sort($arr);

    print_r($arr);
  • 相关阅读:
    js中Frame框架的属性获取(1)
    c#中文件上传(1)
    表单验证Validform
    Mybatis语法笔记
    js的checkbox
    调用微信Js-SDK支付
    调用微信Js-SDK图片
    java后台上传到linux
    web服务器内层溢出
    SpringMVC
  • 原文地址:https://www.cnblogs.com/siqi/p/2667145.html
Copyright © 2011-2022 走看看