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;
    }
    

  • 相关阅读:
    vscode 增加git-bash 去除问题中的信息
    在Visual Studio Code的侧栏中隐藏某些文件
    word中两端对齐之后文字之间空格很大
    Word中如何设置公式居中,但在同一行的公式序号靠右
    vscode隐藏不常用文件及文件夹
    Console.log输出数组,值并非期望中的值
    word 查找替换 ctrl + H
    excel + ArcGIS 坐标数据处理
    EPSON 墨仓式打印机 使用
    推动新阶段水利高质量发展
  • 原文地址:https://www.cnblogs.com/qhorse/p/5429932.html
Copyright © 2011-2022 走看看