如何在不使用php中的sort()函数的情况下对数组进行排序?

时间:2015-04-07 05:14:42

标签: php algorithm logic

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

我需要的是什么

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

我想以升序排序这个数组。我可以使用sort()函数来做,但我想不使用sort()函数。

6 个答案:

答案 0 :(得分:5)

你在找这个:

<?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);
?>

答案 1 :(得分: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);

答案 2 :(得分:1)

使用此

$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";
 }

答案 3 :(得分:1)

您应该使用 QuickSort ,因为这实际上是排序数据数组的最快方法。 PHP的数组排序函数sort()使用QuickSort。 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

答案 4 :(得分:1)

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

$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);

答案 5 :(得分:0)

      $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);