繁体   English   中英

PHP 和 Python 中的冒泡排序

[英]Bubble Sort in PHP and 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);

排序实际上是有效的,但是由于您没有传递对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);

并且编译错误会显示在网页上

冒泡排序 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>';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM