久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

PHP常用的四種排序方法及二種查找方法

 昵稱44082851 2017-09-27
PHP 最常用的四種排序方法  冒泡  選擇  插入 快速
        二種查找    順序查找    二分查找
代碼
  1. <?php
  2. /**
  3. * PHP最常用的四個排序方法及二種查找方法
  4. * 下面的排序方法全部都通過測試
  5. * auther : soulence
  6. * date : 2015/06/20
  7. */

  8. //PHP冒泡排序法
  9. function bubbleSort(&$arr){
  10.   //這是一個中間變量
  11.   $temp=0;
  12.   //我們要把數(shù)組,,從小到大排序
  13.   //外層循環(huán)
  14.   $flag=false;//這個優(yōu)化之后效率會很高,,一般夠用
  15.   for($i=0;$i<count($arr)-1;$i++){
  16.    
  17.       for($j=0;$j<count($arr)-1-$i;$j++){
  18.           //說明前面的數(shù)比后面的數(shù)大,就要交換
  19.           if($arr[$j]>$arr[$j+1]){
  20.                 $temp=$arr[$j];
  21.                 $arr[$j]=$arr[$j+1];
  22.                 $arr[$j+1]=$temp;
  23.                 $flag=true;
  24.          }
  25.       }
  26.       if(!$flag){
  27.         //已經(jīng)是有序了
  28.         break;
  29.       }
  30.       $flag=false;
  31.    }
  32. }

  33. //PHP選擇排序法   效率比冒泡要高
  34. function selectSort(&$arr){
  35.    $temp=0;
  36.    for($i=0;$i<count($arr)-1;$i++){
  37.        //假設(shè)$i就是最小的數(shù)
  38.        $minVal=$arr[$i];
  39.        //記錄我認(rèn)為的最小數(shù)的下標(biāo)
  40.        $minIndex=$i;
  41.        for($j=$i+1;$j<count($arr);$j++){
  42.            //說明我們認(rèn)為的最小值,,不是最小
  43.            if($minVal>$arr[$j]){
  44.                  $minVal=$arr[$j];
  45.                  $minIndex=$j;
  46.            }
  47.        }
  48.        //最后交換
  49.        $temp=$arr[$i];
  50.        $arr[$i]=$arr[$minIndex];
  51.        $arr[$minIndex]=$temp;
  52.    }
  53. }

  54. //插入排序法(小到大排序)   效率又比  選擇排序法要高一些
  55. function insertSort(&$arr){
  56.    //先默認(rèn)下標(biāo)為0的這個數(shù)已經(jīng)是有序
  57.    for($i=1;$i<count($arr);$i++){
  58.        //$insertVal是準(zhǔn)備插入的數(shù)
  59.        $insertVal=$arr[$i];
  60.        //準(zhǔn)備先和誰下標(biāo)為$inserIndex的比較
  61.        $inserIndex=$i-1;
  62.        //如果這個條件滿足,,說明我們還沒有找到適當(dāng)?shù)奈恢?br>
  63.        while($inserIndex >= 0 && $insertVal < $arr[$inserIndex]){
  64.        //同時把數(shù)后移
  65.             $arr[$inserIndex+1] = $arr[$inserIndex];
  66.             $inserIndex--;
  67.        }
  68.        //插入(這時就給$inserIndex找到適當(dāng)?shù)奈恢茫?br>
  69.        $arr[$inserIndex+1] = $insertVal;
  70.    }
  71. }

  72.    
  73. //快速排序法  第一種寫法  不是我實(shí)現(xiàn)的
  74. function quickSort($left,$right,&$arr){
  75.      $l=$left;
  76.      $r=$right;
  77.      $pivot= $arr[($left+$right)/2];
  78.      while($l<$r){
  79.          while($arr[$l]<$pivot){
  80.             $l++;
  81.          }
  82.          while($arr[$r]>$pivot){
  83.             $r--;
  84.          }
  85.          if($l>=$r){
  86.             break;
  87.          }
  88.          
  89.          $temp=$arr[$l];
  90.          $arr[$l]=$arr[$r];
  91.          $arr[$r]=$temp;
  92.          if($arr[$l]==$pivot){
  93.             --$r;
  94.          }
  95.          if($arr[$r]==$pivot){
  96.             ++$l;
  97.          }
  98.      }
  99.      if($l==$r){
  100.         $l++;
  101.         $r--;
  102.      }
  103.      if($left<$r) quickSort($left,$r,$arr);
  104.      if($right>$l) quickSort($l,$right,$arr);
  105. }

  106. /**
  107. * 快速排序方法  第二種實(shí)現(xiàn)方法  自己實(shí)現(xiàn)的
  108. * PHP快速排序方法
  109. * $order asc  小到大  desc大到小  默認(rèn)是asc
  110. * $order 的值只能為 asc desc 如果亂寫一個值也是按asc排序的
  111. */
  112. function quickSort2($arr,$order = 'asc')
  113. {
  114.   if(count($arr) <= 1)
  115.     return $arr;

  116.   $arr_left = $arr_right = array();

  117.   $val = $arr[0];unset($arr[0]);

  118.   foreach ($arr as $v) {
  119.     if(strtolower($order) == 'desc'){
  120.       if($v < $val)
  121.         $arr_right[] = $v;
  122.       else
  123.         $arr_left[] = $v;
  124.     }else{
  125.       if($v > $val)
  126.         $arr_right[] = $v;
  127.       else
  128.         $arr_left[] = $v;
  129.     }
  130.   }

  131.   $arr_left = quickSort($arr_left,$order);
  132.   $arr_right = quickSort($arr_right,$order);

  133.   return array_merge($arr_left,array($val),$arr_right);
  134. }


  135. //下面是查找
  136. $arr=array(46,90,900,0,-1);
  137. //這是按順序查詢
  138. function search(&$arr,$findVal){     
  139.     $flag=false;
  140.     for($i=0;$i<count($arr);$i++){
  141.         if($findVal==$arr[$i]){
  142.             echo "找到了,下標(biāo)為=$i";
  143.             $flag=true;
  144.             //查詢一次,,如果多次就不要這個 break;
  145.         }
  146.     }
  147.     if(!$flag){
  148.         echo "查無此數(shù)";
  149.     }
  150. }

  151. //調(diào)用二分查找
  152. $arr=array(0,90,900,99990);//注意,,一定要是有序的
  153. binarySwarch($arr,90,0,count($arr)-1);

  154. //二分查找函數(shù),它有一個前提,查找的數(shù)組必須是有序的
  155. function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){
  156.     //如果$rightIndex < $leftIndex條件成立,,說明沒有這個數(shù),,則退出
  157.     if($rightIndex < $leftIndex){
  158.         echo "找不到該數(shù)";
  159.         return;
  160.     }
  161.     //首先找到中間這個數(shù)  round是出于如果出現(xiàn)小數(shù),四舍五入
  162.     $middleIndex=round(($rightIndex+$leftIndex)/2);
  163.     //如果大于則向后面找
  164.     if($findVal > $arr[$middleIndex]){
  165.         binarySearch($arr,$findVal,$middleIndex+1,$rightIndex);
  166.         //如果小于中間數(shù),,則向前面找
  167.     }else if($findVal < $arr[$middleIndex]){
  168.         binarySearch($arr,$findVal,$leftIndex,$middleIndex-1);
  169.     }else{
  170.         echo "找到這個數(shù),。下標(biāo)是$middleIndex";
  171.     }
  172. }

  173. ?>

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多