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

举报
Lansonli 发表于 2021/09/29 00:42:09 2021/09/29
【摘要】 算法原理: 1.比较相邻的元素,如果第一个比第二个大,那么就交换这两个元素。 2.对每一对相邻元素做同样的工作,从第一对开始到最后一对结束,最后的元素应该会是最大的数。 3.除了最后一个元素外,针对其他的元素重复以上步骤。 4.对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为止。 实现代码: <?php ...

算法原理:

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

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

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

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

实现代码:


  
  1. <?php
  2. header("Content-type:text/html;charset=utf-8");
  3. // 性能最差的冒泡排序方法
  4. function maopao1($arr) {
  5. $len = count($arr); //计算数字长度
  6. for ($i = 1; $i < $len; $i++) {
  7. // 该层循环控制需要冒泡的轮数
  8. for ($k = 0; $k < $len -$i; $k++) {
  9. if ($arr[$k] > $arr[$k+1]) {
  10. $tmp = $arr[$k];
  11. $arr[$k] = $arr[$k+1];
  12. $arr[$k+1] = $tmp;
  13. }
  14. }
  15. }
  16. return $arr;
  17. }
  18. // 性能最好的冒泡排序方法
  19. function maopao2($arr) {
  20. // 设置变量的初始值
  21. $low = 0;
  22. $high = count($arr) -1;
  23. while ($low < $high) {
  24. // 正向冒泡,找到最大值
  25. for ($j = $low; $j < $high; ++$j) {
  26. if ($arr[$j] > $arr[$j+1]) {
  27. $tmp = $arr[$j];
  28. $arr[$j] = $arr[$j+1];
  29. $arr[$j+1] = $tmp;
  30. }
  31. }
  32. --$high;
  33. // 放向冒泡,找到最小值
  34. for ($j = $high; $j > $low; --$j) {
  35. if ($arr[$j] < $arr[$j-1]) {
  36. $tmp = $arr[$j];
  37. $arr[$j] = $arr[$j-1];
  38. $arr[$j-1] = $tmp;
  39. }
  40. }
  41. ++$low;
  42. }
  43. return $arr;
  44. }
  45. $arr = array(121,656,8997,11,56456,778,65454,314354,1121);
  46. echo "排序前:";
  47. foreach ($arr as $k => $val) {
  48. echo $val.' ';
  49. }
  50. echo "<br>方法一排序后:";
  51. $arr = maopao1($arr);
  52. foreach ($arr as $k => $val) {
  53. echo $val.' ';
  54. }
  55. echo "<br>方法二排序后:";
  56. $arr = maopao2($arr);
  57. foreach ($arr as $k => $val) {
  58. echo $val.' ';
  59. }
  60. ?>

 

文章来源: lansonli.blog.csdn.net,作者:Lansonli,版权归原作者所有,如需转载,请联系作者。

原文链接:lansonli.blog.csdn.net/article/details/102680729

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。