排序算法

  • 冒泡排序

    /**
    * 冒泡排序
    *
    * @params $arr 要排序的数组
    * @params $sot 默认升序排序,false 降序排序
    */
      function bubble_sort($arr,$sot = true)
      {
          $len = count($arr);
          for($i=0;$i<$len-1;$i++){
              //用来判断是否发生交换,没有则可以结束排序
              $flag = false;
              for($j=0;$j<$len-$i-1;$j++){
                  if($sot){
                      //升序排序
                      if($arr[$j]>$arr[$j+1]){
                          $mid = $arr[$j];
                          $arr[$j] = $arr[$j+1];
                          $arr[$j+1] = $mid;
                          $flag = true;
                      }
                  }else{
                      //降序排序
                      if($arr[$j]<$arr[$j+1]){
                          $mid = $arr[$j];
                          $arr[$j] = $arr[$j+1];
                          $arr[$j+1] = $mid;
                          $flag = true;
                      }
                  }
              }
              if(!$flag){
                  //排序已完成
                  break;
              }
          }
          return $arr;
      }
  • 插入排序

       /**
       * 插入排序
       *
       * @params $arr 要排序的数组
       * @params $flag 默认升序排序 false时,降序排序
       */
      function insertSort($arr,$flag = true)
      {
          $len = count($arr);
    
          for($i = 0;$i<$len-1;$i++){
              $preIndex = $i; //记录位置
              $current = $arr[$preIndex+1];//记录下一个的值
    
              while($preIndex >=0){
                  if($flag){
                      if(($current > $arr[$preIndex])){
                          break;
                      }
                  }else{
                      if($current < $arr[$preIndex]){
                          break;
                      }
                  }
                  $arr[$preIndex+1] = $arr[$preIndex];
                  $preIndex--;
              }
              $arr[$preIndex+1] = $current;
          }
          return $arr;
      }
  • 选择排序

    /**
       * 选择排序
       *
       * @params $arr 要排序的数组
       * @params $flag 默认true时,升序排序,否则降序排序
       */
      function select_sort($arr,$flag = true)
      {
          $len = count($arr);
    
          for($i=0;$i<$len;$i++){
              $currentIndex = $i; //当前比较元素的位置
              for($j=$i+1;$j<$len;$j++){
                  if($flag ? $arr[$j]<$arr[$currentIndex] : $arr[$j]>$arr[$currentIndex]){
                      $currentIndex = $j;
                  }
              }
              //交换元素
              if($i != $currentIndex){
                  $mid = $arr[$i];
                  $arr[$i] = $arr[$currentIndex];
                  $arr[$currentIndex] = $mid;
              }
          }
          return $arr;
      }
  • 希尔排序

    /**
       * 希尔排序
       * @params $arr 排序数组
       * @params $flag 默认升序排序 false 则降序排序
       */
      function shell_sort($arr,$flag = true)
      {
          $len = count($arr);
          for($gap = floor($len/2);$gap > 0;$gap = floor($gap/2)){
              for($j = $gap;$j < $len;$j++){
                  for($k = $j-$gap;$k >=0 && ($flag ? $arr[$k+$gap] < $arr[$k] : $arr[$k+$gap] > $arr[$k]);$k -= $gap){
                      $temp = $arr[$k];
                      $arr[$k] = $arr[$k+$gap];
                      $arr[$k+$gap] = $temp;
                  }
              }
          }
          return $arr;
      }
本作品采用《CC 协议》,转载必须注明作者和本文链接

sunshine

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!