PHP算法题:如何实现冒泡排序
【摘要】
算法原理:
1.比较相邻的元素,如果第一个比第二个大,那么就交换这两个元素。
2.对每一对相邻元素做同样的工作,从第一对开始到最后一对结束,最后的元素应该会是最大的数。
3.除了最后一个元素外,针对其他的元素重复以上步骤。
4.对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为止。
实现代码:
<?php ...
算法原理:
1.比较相邻的元素,如果第一个比第二个大,那么就交换这两个元素。
2.对每一对相邻元素做同样的工作,从第一对开始到最后一对结束,最后的元素应该会是最大的数。
3.除了最后一个元素外,针对其他的元素重复以上步骤。
4.对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为止。
实现代码:
-
<?php
-
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 "<br>方法一排序后:";
-
$arr = maopao1($arr);
-
foreach ($arr as $k => $val) {
-
echo $val.' ';
-
-
}
-
echo "<br>方法二排序后:";
-
$arr = maopao2($arr);
-
foreach ($arr as $k => $val) {
-
echo $val.' ';
-
-
}
-
?>
文章来源: lansonli.blog.csdn.net,作者:Lansonli,版权归原作者所有,如需转载,请联系作者。
原文链接:lansonli.blog.csdn.net/article/details/102680729
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)