最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP版本常用的排序算法匯總

 更新時(shí)間:2015年12月20日 11:46:25   投稿:hebedich  
本文給大家匯總介紹了一些php中常見(jiàn)的排序算法的代碼,非常實(shí)用,有需要的小伙伴可以參考下。

//1、冒泡排序

function bubble_sort($arr){
  $n = count($arr);
  for($i=0;$i<$n-1;$i++){
    for($j=$i+1;;$j<$n-$i;$j++){
      if($arr[$j]<$arr[$i]){
        $temp = $arr[$i];
        $arr[$i] = $arr[$j];
        $arr[$j] = $temp;
      }
    }
  }
}

 //2、歸并排序

//merge函數(shù)將指定的兩個(gè)有序數(shù)組(arr1arr2,)合并并且排序
//我們可以找到第三個(gè)數(shù)組,然后依次從兩個(gè)數(shù)組的開(kāi)始取數(shù)據(jù)哪個(gè)數(shù)據(jù)小就先取哪個(gè)的,然后刪除掉剛剛?cè)∵^(guò)///的數(shù)據(jù)
function al_merge($arrA, $arrB)
{
$arrC = array();
while (count($arrA) && count($arrB)) {
//這里不斷的判斷哪個(gè)值小,就將小的值給到arrC,但是到最后肯定要剩下幾個(gè)值,
//不是剩下arrA里面的就是剩下arrB里面的而且這幾個(gè)有序的值,肯定比arrC里面所有的值都大所以使用
$arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB);
}
return array_merge($arrC, $arrA, $arrB);
}

//歸并排序主程序
function al_merge_sort($arr)
{
$len = count($arr);
if ($len <= 1) {
return $arr; //遞歸結(jié)束條件,到達(dá)這步的時(shí)候,數(shù)組就只剩下一個(gè)元素了,也就是分離了數(shù)組
}
$mid = intval($len / 2); //取數(shù)組中間
$left_arr = array_slice($arr, 0, $mid); //拆分?jǐn)?shù)組0-mid這部分給左邊left_arr
$right_arr = array_slice($arr, $mid); //拆分?jǐn)?shù)組mid-末尾這部分給右邊right_arr
$left_arr = al_merge_sort($left_arr); //左邊拆分完后開(kāi)始遞歸合并往上走
$right_arr = al_merge_sort($right_arr); //右邊拆分完畢開(kāi)始遞歸往上走
$arr = al_merge($left_arr, $right_arr); //合并兩個(gè)數(shù)組,繼續(xù)遞歸
return $arr;
}

$arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9);
print_r(al_merge_sort($arr));

 //3、二分查找-遞歸

//二分查找-遞歸
function bin_search($array,$low,$high,$k){
  if($low <= $high){
    $mid = intval(($low+$high)/2);
  }else{
    return false;
  }
  if($array[$mid] == $k){
    return $mid;
  }elseif($k < $array[$mid]){
    return bin_search($array,$low,$mid-1,$k);
  }else{
    return bin_search($array,$mid+1,$high,$k);
  }
}
$arr = array(12, 5, 4, 7, 3, 8, 4, 2, 6, 4, 9);
$index = bin_search($arr,0,10,12); //直接輸出為空,不解
echo(intval($index));

//4、二分查找-非遞歸

function bin_search($arr,$low,$high,$value) {//$arr 數(shù)組; $slow 最小索引; $high 最大索引 $value 查找的值
  while($low<=$high) { 
    $mid=intval(($low+$high)/2); 
    if($value==$arr[$mid]){
      return $mid; 
    }elseif($value<$arr[$mid]){
      $high=$mid-1; 
    }else{
      $low=$mid+1; 
    } 
  }
  return false; 
}

//5、快速排序

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

//6、選擇排序

function select_sort($arr) {
  $n=count($arr);
  for($i=0;$i<$n;$i++) {
    $k=$i;
    for($j=$i+1;$j<$n;$j++) {
      if($arr[$j]<$arr[$k])
        $k=$j;
    }
    if($k!=$i) {
      $temp=$arr[$i];
      $arr[$i]=$arr[$k];
      $arr[$k]=$temp;
    }
  }
  return $arr;
}

//7、插入排序

function insertSort($arr) {
  $n=count($arr);
  for($i=1;$i<$n;$i++) {
    $tmp=$arr[$i];
    $j=$i-1;
    while($arr[$j]>$tmp) {
      $arr[$j+1]=$arr[$j];
      $arr[$j]=$tmp;
      $j--;
      if($j<0)
        break;
    }
  }
  return $arr;
}

相關(guān)文章

最新評(píng)論

阳原县| 丰台区| 昌乐县| 道真| 台湾省| 松阳县| 甘孜县| 石林| 元朗区| 崇明县| 南汇区| 镇平县| 曲靖市| 达日县| 元阳县| 富民县| 文昌市| 鲁山县| 安陆市| 桐城市| 苏尼特左旗| 南京市| 合水县| 柳州市| 巢湖市| 蓬安县| 彰化县| 布尔津县| 阜新| 永寿县| 西充县| 吴桥县| 通渭县| 南康市| 平远县| 芜湖市| 石门县| 高密市| 娱乐| 南澳县| 沂水县|