PHP冒泡排序

PHP冒泡排序是一种简单的排序算法。它通过比较相邻的元素,并根据需要交换它们的位置来进行排序。算法重复遍历要排序的列表,直到没有需要交换的元素为止。 下面是PHP实现冒泡排序的示例代码:

<?php
function bubbleSort($arr) {
    $n = count($arr);
    for ($i = 0; $i < $n - 1; $i++) {
        for ($j = 0; $j < $n - $i - 1; $j++) {
            if ($arr[$j] > $arr[$j + 1]) {
                $temp = $arr[$j];
                $arr[$j] = $arr[$j + 1];
                $arr[$j + 1] = $temp;
            }
        }
    }
    return $arr;
}
// 示例用法
$numbers = [4, 2, 8, 6, 5];
$sortedNumbers = bubbleSort($numbers);
print_r($sortedNumbers);

以上代码中,bubbleSort函数接受一个数组作为参数,并返回按照升序排列的新数组。内部使用两个嵌套的循环进行比较和交换操作,直到所有元素都按照顺序排列。 示例输出为:[2, 4, 5, 6, 8],即对原始数组进行冒泡排序后的结果

如果要对二维数组进行冒泡排序,可以根据需要比较的元素进行排序。以下是将 $numbers 数组按照键为 "a" 的值进行升序排序的示例代码:

<?php
function bubbleSort($arr, $key) {
    $n = count($arr);
    for ($i = 0; $i < $n - 1; $i++) {
        for ($j = 0; $j < $n - $i - 1; $j++) {
            if ($arr[$j][$key] > $arr[$j + 1][$key]) {
                $temp = $arr[$j];
                $arr[$j] = $arr[$j + 1];
                $arr[$j + 1] = $temp;
            }
        }
    }
    return $arr;
}
// 示例用法
$numbers = [["a" => 2, "b" => 12], ["a" => 1, "b" => 12]];
$sortedNumbers = bubbleSort($numbers, "a");
print_r($sortedNumbers);

以上代码中,bubbleSort函数接收两个参数:数组 $arr 和要比较的键名 $key。函数将根据 $key 的值进行排序。示例中以 "a" 作为键名进行排序,输出为 Array ( [0] => Array ( [a] => 1 [b] => 12 ) [1] => Array ( [a] => 2 [b] => 12 ) ),即按照 "a" 的值进行升序排序后的结果。

若要实现冒泡排序的升序或倒序排序功能,可以在函数中添加一个参数来表示排序的方式。以下是修改后的代码示例:

<?php
function bubbleSort($arr, $key, $order = 'asc') {
    $n = count($arr);
    for ($i = 0; $i < $n - 1; $i++) {
        for ($j = 0; $j < $n - $i - 1; $j++) {
            if ($order === 'asc') {
                if ($arr[$j][$key] > $arr[$j + 1][$key]) {
                    $temp = $arr[$j];
                    $arr[$j] = $arr[$j + 1];
                    $arr[$j + 1] = $temp;
                }
            } elseif ($order === 'desc') {
                if ($arr[$j][$key] < $arr[$j + 1][$key]) {
                    $temp = $arr[$j];
                    $arr[$j] = $arr[$j + 1];
                    $arr[$j + 1] = $temp;
                }
            }
        }
    }
    return $arr;
}
// 示例用法
$numbers = [["a" => 2, "b" => 12], ["a" => 1, "b" => 12]];
$sortedNumbersAsc = bubbleSort($numbers, "a", "asc");
$sortedNumbersDesc = bubbleSort($numbers, "a", "desc");
print_r($sortedNumbersAsc);
print_r($sortedNumbersDesc);

bubbleSort 函数中,我们添加了一个名为 $order 的可选参数,默认值为 'asc' 表示升序排序。如果传入 'desc' 表示倒序排序。根据排序方式进行比较和交换操作。示例输出为:

Array ( [0] => Array ( [a] => 1 [b] => 12 ) [1] => Array ( [a] => 2 [b] => 12 ) )
Array ( [0] => Array ( [a] => 2 [b] => 12 ) [1] => Array ( [a] => 1 [b] => 12 ) )

第一个输出为升序排序结果,第二个输出为倒序排序结果。

要实现支持一维数组和二维数组的冒泡排序,可以在函数中添加一些逻辑来判断输入数组的维度,并进行相应的排序操作。以下是修改后的代码示例:

<?php
function bubbleSort($arr, $key = null, $order = 'asc') {
    $n = count($arr);
    if ($key !== null && is_array($arr[0])) {
        for ($i = 0; $i < $n - 1; $i++) {
            for ($j = 0; $j < $n - $i - 1; $j++) {
                if ($order === 'asc') {
                    if ($arr[$j][$key] > $arr[$j + 1][$key]) {
                        $temp = $arr[$j];
                        $arr[$j] = $arr[$j + 1];
                        $arr[$j + 1] = $temp;
                    }
                } elseif ($order === 'desc') {
                    if ($arr[$j][$key] < $arr[$j + 1][$key]) {
                        $temp = $arr[$j];
                        $arr[$j] = $arr[$j + 1];
                        $arr[$j + 1] = $temp;
                    }
                }
            }
        }
    } else {
        for ($i = 0; $i < $n - 1; $i++) {
            for ($j = 0; $j < $n - $i - 1; $j++) {
                if ($order === 'asc') {
                    if ($arr[$j] > $arr[$j + 1]) {
                        $temp = $arr[$j];
                        $arr[$j] = $arr[$j + 1];
                        $arr[$j + 1] = $temp;
                    }
                } elseif ($order === 'desc') {
                    if ($arr[$j] < $arr[$j + 1]) {
                        $temp = $arr[$j];
                        $arr[$j] = $arr[$j + 1];
                        $arr[$j + 1] = $temp;
                    }
                }
            }
        }
    }
    return $arr;
}
// 示例用法
$numbers1 = [4, 2, 8, 6, 5];
$numbers2 = [["a" => 2, "b" => 12], ["a" => 1, "b" => 12]];
$sortedNumbers1Asc = bubbleSort($numbers1, null, "asc");
$sortedNumbers1Desc = bubbleSort($numbers1, null, "desc");
$sortedNumbers2Asc = bubbleSort($numbers2, "a", "asc");
$sortedNumbers2Desc = bubbleSort($numbers2, "a", "desc");
print_r($sortedNumbers1Asc);
print_r($sortedNumbers1Desc);
print_r($sortedNumbers2Asc);
print_r($sortedNumbers2Desc);

bubbleSort 函数中,我们首先判断输入数组的维度,如果是二维数组且提供了键名 $key,则按照键名进行排序;如果是一维数组,则直接进行排序。示例输出为:

Array ( [0] => 2 [1] => 4 [2] => 5 [3] => 6 [4] => 8 )
Array ( [0] => 8 [1] => 6 [2] => 5 [3] => 4 [4] => 2 )
Array ( [0] => Array ( [a] => 1 [b] => 12 ) [1] => Array ( [a] => 2 [b] => 12 ) )
Array ( [0] => Array ( [a] => 2 [b] => 12 ) [1] => Array ( [a] => 1 [b] => 12 ) )

第一个输出为一维数组升序排序结果,第二个输出为一维数组倒序排序结果,第三个输出为二维数组按照 "a" 键名升序排序结果,第四个输出为二维数组按照 "a" 键名倒序排序结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PHP隔壁老王邻居

啦啦啦啦啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值