2016-09-30 4 views
1

私が知る限り、これら2つのプログラムはまったく同じことを行う必要があります。しかし、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に似ているわけではありませんが、コード化する方法私はスワップで '&$ arr'を宣言すると、引数は参照渡しとなりますか?その場合、配列はPHPソート関数の宣言で参照渡しされません。その結果、関数が返された後でソートされた配列はありません。 – xuanluong

答えて

1

ソートは、実際の作業ではありますが、あなたは、実際の結果を見ることが決してbubble_sort($arr)関数への参照を渡すいけないと。配列は参照渡しされていることをbubble_sort()を伝えることは、あなたが$my_listなく$my_list

ああのコピーを変更していることを意味し、あなたはこれをテストしている場合は、代わり$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); 

$arr[i]を使用して、いくつかのコンパイルエラーが発生しましたエラー報告がオフになっているライブサーバーでは、開発中のスクリプトの先頭にこれらの行を追加します。

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

、コンパイルエラーは、Webページに表示されているでしょう

+0

ありがとう@RiggsFolly。関数のパラメータの '&'は、私がうまくいくまでに何週間もかかるかもしれません!また、私はスワップで要素をインデックスに混ぜていることがわかります。 – Robin

+1

問題はありません、私たちは40歳以上で一緒に固執しました – RiggsFolly