Aplicação de sorting de bolhas em PHP?

Eu preciso fazer um algoritmo de sorting de bolhas em PHP.

Quero saber se alguém tem bons exemplos que posso usar, ou uma biblioteca de código aberto que pode fazer isso.

Eu tenho alguns espaços em um conjunto (array), eu quero preencher esses espaços com object (uma pessoa), então nenhum espaço pode ter um homem e uma mulher, por isso estou tentando descobrir um algoritmo de sorting de bolhas.

Meu plano é preencher qualquer um dos espaços disponíveis, independentemente do gênero, e, depois disso, separá-los separadamente.

Obrigado.

Usar o tipo de bolha é uma idéia muito ruim. Tem complexidade de O(n^2) .

Você deve usar o php usort , que é realmente uma implementação de sorting de mesclagem e uma complexidade O(n*log(n)) garantida.

Um código de exemplo do Manual do PHP –

 function cmp( $a, $b ) { if( $a->weight == $b->weight ){ return 0 ; } return ($a->weight < $b->weight) ? -1 : 1; } usort($unsortedObjectArray,'cmp'); 
 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; } 

Por exemplo:

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

Talvez alguém ache útil minha versão do Bubble Sort:

 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]); } 

Eu obtive a idéia de troca (usando a lista) do comentário acima.

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

Melhorar a sorting de bolhas, divirta-se 🙂

 $sortarr = array(3,5,15,3,2,6,7,50,1,4,5,2,100,9,3,2,6,7,13,18); echo "
"; // Array to be sorted print_r($sortarr); // Sorted Array print_r(bubble_sort($sortarr)); echo "
"; 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; }

Intereting Posts