您的位置:首页 > 编程语言 > PHP开发

[PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)

2016-04-25 10:20 781 查看



冒泡排序:

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: