zoukankan      html  css  js  c++  java
  • [PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)

    
    
    
    

    冒泡排序:

    function bubbleSort($array){ 
      $len=count($array);
      //该层循环控制 需要冒泡的轮数
      for($i=1;$i<$len;$i++){ 
        //该层循环用来控制每轮 冒出一个数 需要比较的次数
        for($k=0;$k<$len-$i;$k++){
          if($array[$k]>$array[$k+1]){
            $tmp=$array[$k+1];
            $array[$k+1]=$array[$k];
            $array[$k]=$tmp;
          }
        }
      }
      return $array;
    }
    
    

    快速排序:

    function quickSort($array){
      if (count($array) <= 1) return $array;
      $key=$array[0];
      $left_arr=array();
      $right_arr=array();
      for($i=1;$i<count($array);$i++){
        if($array[$i]<=$key){
          $left_arr[]=$array[$i];
        }else{
          $right_arr[]=$array[$i];
        } 
      }
      $left_arr=quickSort($left_arr);
      $right_arr=quickSort($right_arr);
      return array_merge($left_arr,array($key),$right_arr); 
    }


    选择排序:

    function selectSort($array) {
      //双重循环完成,外层控制轮数,内层控制比较次数
      $len=count($array);
      for($i=0; $i<$len-1; $i++) {
        //先假设最小的值的位置
        $p = $i; 
        for($j=$i+1; $j<$len; $j++) {
          //$array[$p] 是当前已知的最小值
          if($array[$p] > $array[$j]) {
            //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
            $p = $j;
          }
        }
        //已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
        if($p != $i) {
          $tmp = $array[$p];
          $array[$p] = $array[$i];
          $array[$i] = $tmp;
        }
      }
      return $array; //返回最终结果
    }

    插入排序:

    function insertSort($array) {
      $len=count($array); 
      for($i=1, $i<$len; $i++) {
        $tmp = $array[$i];
        //内层循环控制,比较并插入
        for($j=$i-1;$j>=0;$j--) {
          if($tmp < $array[$j]) {
            //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换
            $array[$j+1] = $array[$j];
            $array[$j] = $tmp;
          } else {
            //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。
            break;
          }
        }
      }
      return $array;
    }
    
    

    二叉树(二分法)排序:

    /** 
    * 递归方法实现二分查找法. 
    * @param Array数组 
    * @param low 数组第一位置 
    * @param high 最高 
    * @param k 要查找的值. 
    * @return 返回值. */ 
    function binSearch($array, $low, $high, $k){
      if ($low <= $high){
        $mid = intval(($low+$high)/2);
        if ($array[$mid] == $k){
          return $mid;
        }elseif ($k < $array[$mid]){
          return binSearch($array, $low, $mid-1, $k);
        }else{
          return binSearch($array, $mid+1, $high, $k);
        }
      }
      return -1;
    }
    

  • 相关阅读:
    linux [Fedora] 下的 "飞秋/飞鸽传书"
    弹跳是不是自由落体?
    插件的简单原理
    WebService的简单应用
    普通按钮的另一种提交方式(调用后台事件)
    ASPNET服务端控件练习(一个机试题)
    AJAX简单的数据增删改与分页应用
    new XMLHttpRequest()和页面关系
    c++中placement new
    netty的引用计数
  • 原文地址:https://www.cnblogs.com/qhorse/p/5429932.html
Copyright © 2011-2022 走看看