PHP和Python中的气泡排序

PHP和Python中的气泡排序,php,python,bubble-sort,Php,Python,Bubble Sort,据我所知,这两个程序应该做完全相同的事情。然而,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

据我所知,这两个程序应该做完全相同的事情。然而,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)


排序实际上正在工作,但由于您没有传递对
气泡排序($arr)
函数的引用,因此您永远看不到实际结果。告诉
bubble\u sort()
数组正在通过引用传递意味着您正在更改
$my\u list
,而不是
$my\u 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);
//冒泡排序
$my_list=[2,3,5,4,1];
函数bubble_sort(&$arr){/=0;$pass_num--){
对于($i=0;$i<$pass\u num;$i++){
如果($arr[$i]>$arr[$i+1]){
//还将此行更改为只传递索引
掉期($arr,$i,$i+1);
}
}
}
}
功能交换(&$arr、$a、$b){
$tmp=$arr[$a];
$arr[$a]=$arr[$b];
$arr[$b]=$tmp;
}
气泡排序($my_list);
打印(我的列表);
如果您在关闭错误报告的实时服务器上测试此功能,请在开发脚本时将这些行添加到正在开发的任何脚本的顶部

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

气泡排序Php

$data_set = [3,44,38,5,15,26,27,2,46,4];

function bubble_sort($data_set){
    $number_of_items = count($data_set);
    for($i = 0; $i <= $number_of_items - 2; $i++){
        for($j = 0; $j <= $number_of_items -($i+2); $j++){
            if($data_set[$j] > $data_set[$j + 1]){
                $temp = $data_set[$j];
                $data_set[$j] = $data_set[$j + 1];
                $data_set[$j + 1] = $temp;
            }
        }
    }
    return $data_set;
}


echo '<pre>';
print_r(bubble_sort($data_set));
echo '</pre>';
$data_set=[3,44,38,5,15,26,27,2,46,4];
函数气泡排序($data\U set){
$number\u of\u items=计数($data\u set);

对于($i=0;$i我唯一一次真正做冒泡排序是在大学里。所以我想这是家庭作业,对吧?不,事实上。从一个40岁以上的人那里自学!不熟悉PHP,但你编写它的方式我想在swap中声明
&$arr
意味着参数是通过引用传递的?如果是这样,那么数组在声明中就不是通过引用传递的n的PHP排序函数,因此在函数返回后您不会对数组进行排序。好的,第一个明显的问题是您在几个地方使用了
$arr[i]
,而不是
$arr[$i]
查看错误消息以自行修复这些问题会很有用。出于某种原因,我使用
I
s而不是
$I
s不会收到错误消息。至于通过引用传递,我相信
&
应该这样做。因此,也许我应该将交换代码放在主函数中?谢谢@RiggsFolly。这是
&
的功能函数参数的计算可能需要几周的时间!而且我看到我在交换中把元素和它们的指数混在一起了。没问题,我们40多岁的人粘在一起了
$data_set = [3,44,38,5,15,26,27,2,46,4];

function bubble_sort($data_set){
    $number_of_items = count($data_set);
    for($i = 0; $i <= $number_of_items - 2; $i++){
        for($j = 0; $j <= $number_of_items -($i+2); $j++){
            if($data_set[$j] > $data_set[$j + 1]){
                $temp = $data_set[$j];
                $data_set[$j] = $data_set[$j + 1];
                $data_set[$j + 1] = $temp;
            }
        }
    }
    return $data_set;
}


echo '<pre>';
print_r(bubble_sort($data_set));
echo '</pre>';