zoukankan      html  css  js  c++  java
  • PHP四种基本排序算法

    $arr=array(1,43,54,62,21,66,32,78,36,76,39);  //将数组从小到大排序
    /*冒泡排序
    思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。*/
    function BubbleSort($arr){
     $len=count($arr);
     for($i=1;$i<$len;$i++){  //外层循环控制需要冒泡的轮数
      for($j=0;$j<$len-$i;$j++){//内层循环用来控制每轮冒出一个数需要比较的次数
       if($arr[$j]>$arr[$j+1]){
        $tmp=$arr[$j];
        $arr[$j]=$arr[$j+1];
        $arr[$j+1]=$tmp;
       }
      }
     }
     return $arr;
    }
                     

    // var_dump(BubbleSort($arr));

    /*选择排序
    思路分析:在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止*/
    function SelectSort($arr){
     $len=count($arr);
     for($i=0;$i<$len;$i++){
      for($j=$i+1;$j<$len;$j++){
       if($arr[$i]>$arr[$j]){
        $temp=$arr[$i];
        $arr[$i]=$arr[$j];
        $arr[$j]=$temp;
       }
      }
     }
     return $arr;
    }
    // print_r(xuanze($arr));
    //

    /*插入排序
    思路分析:在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。*/
    function insertSort($arr) {
        $len=count($arr);
        for($i=1, $i<$len; $i++) {
            $tmp = $arr[$i];
            //内层循环控制,比较并插入
            for($j=$i-1;$j>=0;$j--) {
                if($tmp < $arr[$j]) {
                    //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换
                    $arr[$j+1] = $arr[$j];
                    $arr[$j] = $tmp;
                } else {
                    //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。
                    break;
                }
            }
        }
        return $arr;
    }


      //快速排序
        //待排序数组
        $arr=array(6,3,8,6,4,2,9,5,1);
        //函数实现快速排序
        function quick_sort($arr)
        {
            //判断参数是否是一个数组
            if(!is_array($arr)) return false;
            //递归出口:数组长度为1,直接返回数组
            $length=count($arr);
            if($length<=1) return $arr;
            //数组元素有多个,则定义两个空数组
            $left=$right=array();
            //使用for循环进行遍历,把第一个元素当做比较的对象
            for($i=1;$i<$length;$i++)
            {
                //判断当前元素的大小
                if($arr[$i]<$arr[0]){
                    $left[]=$arr[$i];
                }else{
                    $right[]=$arr[$i];
                }
            }
            //递归调用
            $left=quick_sort($left);
            $right=quick_sort($right);
            //将所有的结果合并
            return array_merge($left,array($arr[0]),$right);


            }
            //调用
            // echo "<pre>";
            // print_r(quick_sort($arr));

  • 相关阅读:
    Vim的行号、语法显示等设置,即.vimrc文件的配置
    Vim 配置详解
    经典SQL语句大全
    几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比
    GHOST XP SP3无法安装IIS服务的解决方法
    开发中巧用Enum枚举类型
    代码的坏味道
    C#转义字符
    Dijit、ExtJS、jQuery UI 异同浅析
    未雨绸缪 Plan to Throw One Away
  • 原文地址:https://www.cnblogs.com/yolo-bean/p/7725380.html
Copyright © 2011-2022 走看看