Bubble Sort в PHP и Python

Насколько я могу судить, эти две программы должны делать одно и то же. Однако версия Python работает, а версия PHP — нет. Что мне не хватает, пожалуйста?

def bubbleSort(alist):
for passnum in range(len(alist)-1,0,-1):
for i in range(passnum):
if alist[i]>alist[i+1]:
temp = alist[i]
alist[i] = alist[i+1]
alist[i+1] = temp

my_list = [2,3,5,4,1]
bubbleSort(my_list)
print(my_list)

<?php
// Bubble Sort
$my_list = [2,3,5,4,1];

function bubble_sort($arr){
$size = count($arr);
for($pass_num = $size - 1; $pass_num >= 0; $pass_num--){
for($i = 0; $i < $pass_num; $i++){
if($arr[i] > $arr[$i + 1]){
swap($arr, $arr[i], $arr[$i+1]);
}
}
}
}function swap(&$arr, $a, $b) {
$tmp = $arr[$a];
$arr[$a] = $arr[$b];
$arr[$b] = $tmp;
}

bubble_sort($my_list);
print_r ($my_list);

1

Решение

Сортировка на самом деле работает, но, как вы не передаете ссылку на bubble_sort($arr) Функция, которую вы никогда не увидите фактический результат. Рассказывая bubble_sort() что массив передается по ссылке, значит вы меняете $my_list а не копия $my_list

Ох, и у вас были некоторые ошибки компиляции, используя $arr[i] вместо $arr[$i]

// Bubble Sort
$my_list = [2,3,5,4,1];

function bubble_sort(&$arr){    // <-- changed to &$arr
$size = count($arr);
for($pass_num = $size - 1; $pass_num >= 0; $pass_num--){
for($i = 0; $i < $pass_num; $i++){
if($arr[$i] > $arr[$i + 1]){
// also changed this line to pass just the indexes
swap($arr, $i, $i+1);
}
}
}
}function swap(&$arr, $a, $b) {
$tmp = $arr[$a];
$arr[$a] = $arr[$b];
$arr[$b] = $tmp;
}

bubble_sort($my_list);
print_r ($my_list);

Если вы тестируете это на работающем сервере, на котором отключены отчеты об ошибках, добавьте эти строки в начало любого сценария, который вы разрабатываете, пока вы его разрабатываете.

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

И ошибки компиляции были бы показаны на веб-странице

1

Другие решения

Других решений пока нет …