Intereting Posts
Алгоритм кластеризации карт Проверка того, что два файла идентичны с использованием чистого PHP? Как остановить эту проверку: «Пользователь имеет защищенный доступ, но класс имеет магический метод __get»? Cookies – PHP против Javascript Hilighting Текущая вкладка навигации Использование URL в PHP Простейший способ чтения csv-файла с использованием php Создание связей HABTM в CakePHP Обработка отказов электронной почты с помощью PHP? php oci8 ext не загружается Невозможно загрузить динамическую библиотеку Специальное сообщение для проверки Laravel Validation Как лучше всего, внутри контроллера, знать, является ли запрос XMLHTTP одним или нет (ZF) Структурирует тип данных в php? Как отправить форму в Bootstrap Modal (отправить метод POST в Modal) Laravel Почему WordPress считается плохо запрограммированным? Миграция таблицы пользователей с хешированным паролем из старого приложения php в новое приложение laravel

Реализация Bubble-сортировки в PHP?

Мне нужно сделать алгоритм сортировки пузырьков в PHP.

Я хочу знать, есть ли у кого-нибудь хорошие примеры, которые я могу использовать, или библиотеку с открытым исходным кодом, которая может это сделать.

У меня есть несколько пробелов в наборе (массиве), я хочу заполнить эти пространства объектом (человеком), поэтому никакое пространство не может иметь мужчину и женщину, поэтому я пытаюсь найти алгоритм сортировки пузырьков.

Мой план состоит в том, чтобы заполнить любое из доступных мест независимо от пола, и после этого сортировать их отдельно.

Благодарю.

Использование пузырьковой сортировки – очень плохая идея. Он имеет сложность O(n^2) .

Вы должны использовать php usort , что на самом деле является реализацией сортировки слиянием и гарантированной сложностью O(n*log(n)) .

Пример кода из руководства 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; } 

Например:

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

Может быть, кто-то найдет полезной мою версию 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]); } 

Я получил идею свопа (используя список) из комментария.

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

Улучшена сортировка пузырьков 🙂

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