返回

PHP算法题:如何实现冒泡排序

发布时间:2022-10-09 00:50:58 338
# html# php

算法原理:

1.比较相邻的元素,如果第一个比第二个大,那么就交换这两个元素。

2.对每一对相邻元素做同样的工作,从第一对开始到最后一对结束,最后的元素应该会是最大的数。

3.除了最后一个元素外,针对其他的元素重复以上步骤。

4.对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为止。

实现代码:


header("Content-type:text/html;charset=utf-8");
// 性能最差的冒泡排序方法
function maopao1($arr) {
$len = count($arr); //计算数字长度
for ($i = 1; $i < $len; $i++) {
// 该层循环控制需要冒泡的轮数
for ($k = 0; $k < $len -$i; $k++) {
if ($arr[$k] > $arr[$k+1]) {
$tmp = $arr[$k];
$arr[$k] = $arr[$k+1];
$arr[$k+1] = $tmp;
}
}
}
return $arr;
}

// 性能最好的冒泡排序方法
function maopao2($arr) {
// 设置变量的初始值
$low = 0;
$high = count($arr) -1;
while ($low < $high) {
// 正向冒泡,找到最大值
for ($j = $low; $j < $high; ++$j) {
if ($arr[$j] > $arr[$j+1]) {
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
}
--$high;
// 放向冒泡,找到最小值
for ($j = $high; $j > $low; --$j) {
if ($arr[$j] < $arr[$j-1]) {
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}
}
++$low;
}
return $arr;
}

$arr = array(121,656,8997,11,56456,778,65454,314354,1121);
echo "排序前:";
foreach ($arr as $k => $val) {
echo $val.' ';
}
echo "
方法一排序后:"
;
$arr = maopao1($arr);
foreach ($arr as $k => $val) {
echo $val.' ';

}
echo "
方法二排序后:"
;
$arr = maopao2($arr);
foreach ($arr as $k => $val) {
echo $val.' ';

}
?>

 

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线