2016-09-30 74 views
1

据我所知,这两个程序应该做同样的事情。但是,Python版本可以工作,而PHP版本不能。请问我错过了什么?泡沫排序在PHP和Python

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

唯一的一次,其实我已经做了冒泡排序在大学上。所以我猜这是作业吧? – RiggsFolly

+0

实际上没有。从40多岁开始自学! – Robin

+0

不熟悉PHP,但你代码的方式我猜在swap中声明'&$ arr'意味着参数是通过引用传递的?如果是这样,那么在PHP排序函数的声明中不会通过引用传递数组,因此在函数返回后没有对数组进行排序。 – xuanluong

回答

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

而且编译错误会显示网页

+0

谢谢@RiggsFolly。在函数参数中'&'可能需要几周才能解决!另外我看到我正在将元素与它们的指数混合在交换中。 – Robin

+1

没问题,40多岁的我们一起坚持着 – RiggsFolly