【问题标题】:How can sort an array without using sort() function in php?如何在不使用 php 中的 sort() 函数的情况下对数组进行排序?
【发布时间】:2015-04-07 05:14:42
【问题描述】:

我正在尝试在不使用 php 的 sort() 函数的情况下对数组进行排序。到目前为止,我已经尝试过,也尝试过谷歌,但无法找到结果。

我到底需要什么

$arr = array(80, 90, 100, 10, 50, 3);

我想按升序对该数组进行排序。我可以使用 sort() 函数,但我想不使用 sort() 函数。

【问题讨论】:

    标签: php algorithm logic


    【解决方案1】:

    你在找这个吗:

    <?php
    $arr = array(80, 90, 100, 10, 50, 3);
    
    for($a = 0; $a < count($arr); $a++) {
        for($b = 0; $b < count($arr)-1; $b ++){
            if($arr[$b] > $arr[$b+1]) {
                $temp = $arr[$b+1];
                $arr[$b+1]=$arr[$b];
                $arr[$b]=$temp;
            }       
        }
    }
    
    print_r($arr);
    ?>
    

    【讨论】:

      【解决方案2】:

      Implementing QuickSort in PHP

      Quicksort recursive.php

      function quicksort( $array ) {
          if( count( $array ) < 2 ) {
              return $array;
          }
          $left = $right = array( );
          reset( $array );
          $pivot_key  = key( $array );
          $pivot  = array_shift( $array );
          foreach( $array as $k => $v ) {
              if( $v < $pivot )
                  $left[$k] = $v;
              else
                  $right[$k] = $v;
          }
          return array_merge(quicksort($left), array($pivot_key => $pivot), quicksort($right));
      }
      

      用法:

      $arr = array(80, 90, 100, 10, 50, 3);
      
      $arr = quicksort($arr);
      
      print_r($arr);
      

      【讨论】:

      • 它的工作,没有什么错误的结果是Array ( [0] =&gt; 3 [1] =&gt; 10 [2] =&gt; 50 [3] =&gt; 80 [4] =&gt; 90 [5] =&gt; 100 )
      • 我添加了用法请看
      • 为什么在函数中使用resetarray_shiftarray_merge?由于OP要求不使用任何PHP内置函数。
      【解决方案3】:

      使用这个

      $srtArray=array(80, 90, 100, 10, 50, 3);
       for ($i=0; $i<count($srtArray); $i++) {
          for ($j=0; $j<count($srtArray); $j++) {
            // Compare two elements of array
            if ($srtArray[$j] > $srtArray[$i]){
              $tmp = $srtArray[$i];
              $srtArray[$i] = $srtArray[$j];
              $srtArray[$j] = $tmp;
            }
          }
       }
      //Print an array after sorting
       for($i=0;$i<count($srtArray);$i++){
         echo $srtArray[$i]."<br>\n";
       }
      

      【讨论】:

        【解决方案4】:

        您应该使用 QuickSort,因为它实际上是对数据数组进行排序的最快方法。 PHP 的数组排序函数sort() 使用QuickSort。快速排序是 O(n log n)。

        <?php
        
        $arr = array(80, 90, 100, 10, 50, 3);
        
        function quicksort( $array ) {
            if( count( $array ) < 2 ) {
                return $array;
            }
            $left = $right = array( );
            reset( $array );
            $pivot_key  = key( $array );
            $pivot  = array_shift( $array );
            foreach( $array as $k => $v ) {
                if( $v < $pivot )
                    $left[$k] = $v;
                else
                    $right[$k] = $v;
            }
            return array_merge(quicksort($left), array($pivot_key => $pivot), quicksort($right));
        }
        
        $array  = quicksort( $arr );
        
        print_r($array);
        

        输出:

        Array
        (
            [0] => 3
            [1] => 10
            [2] => 50
            [3] => 80
            [4] => 90
            [5] => 100
        )
        

        但是如果你不能使用任何内置函数,你可以使用 BubbleSort 的这个实现:

        $arr = array(80, 90, 100, 10, 50, 3);
        
         function bubbleSort ($items) {
             $size = count($items);
             for ($i=0; $i<$size; $i++) {
                  for ($j=0; $j<$size-1-$i; $j++) {
                       if ($items[$j+1] < $items[$j]) {
                           arraySwap($items, $j, $j+1);
                       }
                  }
             }
             return $items;
         }
         function arraySwap (&$arr, $index1, $index2) {
             list($arr[$index1], $arr[$index2]) = array($arr[$index2], $arr[$index1]);
         }
        
        $array  = bubbleSort( $arr );
        
        print_r($array);
        

        参考:

        http://pageconfig.com/post/implementing-quicksort-in-php

        http://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Quicksort#PHP

        http://www.codecodex.com/wiki/Bubble_sort#PHP

        【讨论】:

        • Adrian 为什么在函数中使用reset、array_shift和array_merge?由于OP要求不使用任何PHP内置函数。
        • @ayazkhane OP 说“不使用 sort() 函数”你在哪里读到“没有任何 PHP 内置函数”?
        • @ayazkhane 如果你愿意,你可以使用 BubbleSort,我编辑我的答案
        • 请注意,如果您知道值的分布但不知道它们的顺序,则可以在 O(n) 时间内进行排序。例如,您知道有值 1 .. 1000 但只是不知道它们的顺序,您可以非常快速地排序(即使它需要就地)。即使您知道这些值是正态分布的并且您知道标准偏差,您仍然可以比 O(n log n) 更快。
        【解决方案5】:

        希望这将更加优化。试试这个:

        $arr = array(80, 90, 100, 10, 50, 3);
        
        $count  = count($arr);
        for ($i = 0; $i < $count - 1; $i++ ) {
            for ($j = $i+1; $j < $count; $j++ ) {
                if ($arr[$i] > $arr[$j]) {
                    $temp  = $arr[$i];
                    $arr[$i] = $arr[$j];
                    $arr[$j] = $temp;
                }
            }
        }
        print_r($arr);
        

        【讨论】:

          【解决方案6】:
                $arr = array(80, 90, 100, 10, 50, 3,34,1,890);
          
               for($i = 0; $i < count($arr); $i++) {
          
                 for($x = 0; $x < count($arr)-1; $x ++){
          
              if($arr[$x] > $arr[$x+1]) {
          
                  $temp = $arr[$x+1];
                  $arr[$x+1]=$arr[$x];
                  $arr[$x]=$temp;
              }       
             }
           }
          
           print_r($arr);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-27
            • 2021-11-13
            • 1970-01-01
            • 2021-12-12
            • 1970-01-01
            相关资源
            最近更新 更多