php中常見的排序演算法

來源:互聯網
上載者:User
本篇文章主要介紹php中常見的排序演算法,感興趣的朋友參考下,希望對大家有所協助。

//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函數將指定的兩個有序數組(arr1arr2,)合并並且排序//我們可以找到第三個數組,然後依次從兩個數組的開始取資料哪個資料小就先取哪個的,然後刪除掉剛剛取過///的資料function al_merge($arrA, $arrB){$arrC = array();while (count($arrA) && count($arrB)) {//這裡不斷的判斷哪個值小,就將小的值給到arrC,但是到最後肯定要剩下幾個值,//不是剩下arrA裡面的就是剩下arrB裡面的而且這幾個有序的值,肯定比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; //遞迴結束條件,到達這步的時候,數組就只剩下一個元素了,也就是分離了數組}$mid = intval($len / 2); //取數組中間$left_arr = array_slice($arr, 0, $mid); //拆分數組0-mid這部分給左邊left_arr$right_arr = array_slice($arr, $mid); //拆分數組mid-末尾這部分給右邊right_arr$left_arr = al_merge_sort($left_arr); //左邊拆分完後開始遞迴合并往上走$right_arr = al_merge_sort($right_arr); //右邊拆分完畢開始遞迴往上走$arr = al_merge($left_arr, $right_arr); //合并兩個數組,繼續遞迴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 數組; $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;}

總結:以上就是本篇文的全部內容,希望能對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.