2012-01-25 12 views
13

Potrzebuję zrobić algorytm sortowania bąbelkowego w PHP.Implementacja sortowania bąbelkowego w PHP?

Chcę wiedzieć, czy ktoś ma jakieś dobre przykłady, których mogę użyć, lub biblioteki open source, które mogą to zrobić.

Mam kilka spacji w zbiorze (tablica), chcę wypełnić te przestrzenie obiektem (osobą), więc żadna przestrzeń nie może mieć mężczyzny i kobiety, dlatego próbuję znaleźć bańkę sortuj algorytm.

Mój plan polega na wypełnieniu dowolnych dostępnych powierzchni, niezależnie od płci, a następnie posortowaniu ich osobno.

Dzięki.

+0

Zobacz mój blogu z realizacją sortowania prosty bubble: http://blog.richardknop.com/2012/06/bubble-sort- algorytm-php-implementacja/ –

Odpowiedz

19

Korzystanie bubble sort to bardzo zły pomysł. Ma złożoność O(n^2).

Powinieneś użyć php usort, która jest w rzeczywistości implementacją sortowania scalonego i gwarantowaną złożonością O(n*log(n)).

Próbkę kodu z podręcznika PHP -

function cmp($a, $b) { 
    if( $a->weight == $b->weight){ return 0 ; } 
    return ($a->weight < $b->weight) ? -1 : 1; 
} 

usort($unsortedObjectArray,'cmp'); 
+0

ale moje potrzeby to nie tylko sortowanie, muszę przypisać te obiekty (osoby) do przestrzeni – nivanka

+0

Tak! też możesz to zrobić. BTW, myślę, że nie dostałeś poprawnie mojego rozwiązania. – Rifat

+0

if ($ a-> weight == $ b-> weight) {return 0; } return ($ a-> weight < $b-> weight)? -1: 1; --- to jest ważna rzecz, prawda? – nivanka

21
function bubble_sort($arr) { 
    $size = count($arr)-1; 
    for ($i=0; $i<$size; $i++) { 
     for ($j=0; $j<$size-$i; $j++) { 
      $k = $j+1; 
      if ($arr[$k] < $arr[$j]) { 
       // Swap elements at indices: $j, $k 
       list($arr[$j], $arr[$k]) = array($arr[$k], $arr[$j]); 
      } 
     } 
    } 
    return $arr; 
} 

Na przykład:

$arr = array(1,3,2,8,5,7,4,0); 

print("Before sorting"); 
print_r($arr); 

$arr = bubble_sort($arr); 
print("After sorting by using bubble sort"); 
print_r($arr); 
+1

najlepszym algorytmem sortowania jest szybkie sortowanie. z O (nlog (n)), jest szybszym algorytmem do sortowania. możesz go zobaczyć tutaj: http://www.phptutorialonline.com/php-quicksort.aspx – JackTurky

+0

twoje pętle nie zatrzymuj się, gdy nie ma wymiany. powinieneś użyć while lub przerwać pętlę – user2997418

+0

@ 蒋艾伦 to będzie jeszcze szybsze, jeśli użyje pętli foreach. – FluorescentGreen5

5
 

$numbers = array(1,3,2,5,2); 
$array_size = count($numbers); 

echo "Numbers before sort: "; 
for ($i = 0; $i < $array_size; $i++) 
    echo $numbers[$i]; 
echo "n"; 

for ($i = 0; $i < $array_size; $i++) 
{ 
    for ($j = 0; $j < $array_size; $j++) 
    { 
     if ($numbers[$i] < $numbers[$j]) 
     { 
     $temp = $numbers[$i]; 
     $numbers[$i] = $numbers[$j]; 
     $numbers[$j] = $temp; 
     } 
    } 
} 

echo "Numbers after sort: "; 
for($i = 0; $i < $array_size; $i++) 
    echo $numbers[$i]; 
echo "n"; 
 
+0

dziękuję za to, wygląda to tak samo jak odpowiedź @ JackTurky. – nivanka

0

Może ktoś znajdzie przydatnych moją wersję Bubble sortowania:

function BubbleSort(&$L) 
{ 
    $rm_key = count($L); 
    while(--$rm_key > -1)#after this the very first time it will point to the last element 
     for($i=0; $i<$rm_key; $i++) 
      if($L[$i] > $L[$i+1]) 
       list($L[$i],$L[$i+1]) = array($L[$i+1],$L[$i]);   
} 

mam (listy) za pomocą wymiany pomysł z góry komentarza.

2
function bubble_sort($arr) { 
    $n = count($arr); 
    do { 
     $swapped = false; 
     for ($i = 0; $i < $n - 1; $i++) { 
      // swap when out of order 
      if ($arr[$i] > $arr[$i + 1]) { 
       $temp = $arr[$i]; 
       $arr[$i] = $arr[$i + 1]; 
       $arr[$i + 1] = $temp; 
       $swapped = true; 
      } 
     } 
     $n--; 
    } 
    while ($swapped); 
    return $arr; 
} 
+0

Hej, dzięki za to. Wiem, że nie wygrałeś, ale to jest dokładnie ta logika, której szukałem! – pappy

0
function bubbleSort(array $arr) 
    { 
     $n = sizeof($arr); 
     for ($i = 1; $i < $n; $i++) { 
      for ($j = $n - 1; $j >= $i; $j--) { 
       if($arr[$j-1] > $arr[$j]) { 
        $tmp = $arr[$j - 1]; 
        $arr[$j - 1] = $arr[$j]; 
        $arr[$j] = $tmp; 
       } 
      } 
     } 

     return $arr; 
    } 

    // Example: 
    $arr = array(255,1,22,3,45,5); 
    $result = bubbleSort($arr); 
    print_r($result); 
//==================================================== 
//------- improved version---------------------------- 
//====================================================  
function bubbleSortImproved(array $arr) 
{ 
    $n = sizeof($arr);  
    for ($i = 1; $i < $n; $i++) { 
     $flag = false; 
     for ($j = $n - 1; $j >= $i; $j--) { 
      if($arr[$j-1] > $arr[$j]) { 
       $tmp = $arr[$j - 1]; 
       $arr[$j - 1] = $arr[$j]; 
       $arr[$j] = $tmp; 
       $flag = true; 
      } 
     } 
     if (!$flag) { 
      break; 
     } 
    } 

    return $arr; 
} 

// Example: 
$arr = array(255,1,22,3,45,5); 
$result = bubbleSortImproved($arr); 
print_r($result); 
0

Lepsza Bubble Sortowanie cieszyć :)

$sortarr = array(3,5,15,3,2,6,7,50,1,4,5,2,100,9,3,2,6,7,13,18); 

    echo "<pre>"; 
    // Array to be sorted 
    print_r($sortarr); 
    // Sorted Array 
    print_r(bubble_sort($sortarr)); 
    echo "<pre>"; 

    function bubble_sort($sortarr){ 
     // Bubble sorting 
     $array_count = count($sortarr); 
     for($x = 0; $x < $array_count; $x++){ 
      for($a = 0 ; $a < $array_count - 1 ; $a++){ 
       if($a < $array_count){ 
        if($sortarr[$a] > $sortarr[$a + 1]){ 
          swap($sortarr, $a, $a+1); 
        } 
       } 
      } 
     } 
     return $sortarr;  
    } 

    function swap(&$arr, $a, $b) { 
     $tmp = $arr[$a]; 
     $arr[$a] = $arr[$b]; 
     $arr[$b] = $tmp; 
    } 
Powiązane problemy