PHP的简易冒泡法代码分享


Posted in PHP onAugust 28, 2012

很基础的东西,感觉代码还不够简洁,希望高手指导修改

<?php 
function BubbleSort($str){ 
for($i=0;$i<count($str);$i++){//从数组末尾取一个值; 
for ($k=count($str)-2;$k>=$i;$k--){//将这个值向前冒泡; 
if($str[$k+1]<$str[$k]){ //将小于号改为大于号,就是降序排列; 
$tmp=$str[$k+1]; 
$str[$k+1]=$str[$k]; 
$str[$k]=$tmp; 
} 
} 
} 
return $str; 
} 
//以下是测试 
$str=array(5,8,2,6,10,0,3,12,11); 
print_r(BubbleSort($str)); 
?>

php 冒泡排序2
基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。

由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复 9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i, j的
值依次为1,2,...10-i。

<?php 
function asc($a) 
{ 
for($i=0;$i<count($a)-1;$i++) 
{ 
for($j=0;$j<count($a)-1;$j++) 
{ 
if($a[$j]>$a[$j+1]) 
{ 
$tmp=$a[$j+1]; 
$a[$j+1]=$a[$j]; 
$a[$j]=$tmp; 
} 
} 
} 
print_r($a); 
} 
$a = array(9,8,17,6,26,4,33,2,1); 
print_r(asc($a)); 
?> 
<br /> 
<?php 
function desc($a) 
{ 
$c=array(); 
for($i=count($a)-1;$i>0;$i--) 
{ 
for($j=0;$j<count($a)-1;$j++) 
{ 
if($a[$j]<$a[$j+1]) 
{ 
$tmp=$a[$j+1]; 
$a[$j+1]=$a[$j]; 
$a[$j]=$tmp; 
} 
} 
} 
print_r($a); 
} 
$arr=array(33,24,56,55,59); 
desc($arr); 
?> 

PHP冒泡排序法演示
以前面试的时候考官出的笔试题,觉得比较XX,写程序应该是在计算机上面,而不是在笔头上。
PHP程序文件sort_bubble_up.php
<html> 
<head><title>冒泡排序法演示</title><head> 
<link rel="stylesheet" href="sort.css"> 
<body> 
<h1>冒泡排序法演示</h1> 
<table cellpadding="5" cellspacing="1" border="0" align="center"> 
<?php 
//随机生成数组 
$arr=array(); 
echo '<tr><td colspan="10" class="title">初始值</td></tr>'; 
echo '<tr>'; 
for($i=0;$i<10;$i++){ 
$arr[$i]=rand(); 
echo "<td>\$arr[$i]={$arr[$i]}</td>"; 
} 
//进行冒泡法排序 
for($i=9;$i>0;$i--){ 
echo '<tr><td colspan="10" class="title">第'.(10-$i).'次</td></tr>'; 
for($j=0;$j<$i;$j++){ 
if($arr[$j]<$arr[$j+1]){ 
$tmp=$arr[$j]; 
$arr[$j]=$arr[$j+1]; 
$arr[$j+1]=$tmp; 
} 
echo '<tr>'; 
for($k=0;$k<10;$k++){ 
switch($k){ 
case $j : echo '<td class="base">'; break; 
case $j+1 : echo '<td class="light">'; break; 
default : echo '<td>'; 
} 
echo "\$arr[$k]={$arr[$k]}</td>"; 
} 
echo '</tr>'; 
} 
} 
//显示排序结果 
echo '<tr><td colspan="10" class="title">结果</td></tr>'; 
echo '<tr>'; 
for($i=0;$i<10;$i++){ 
echo "<td>\$arr[$i]={$arr[$i]}</td>"; 
} 
echo '</tr>'; 
?> 
</table> 
</body></html>

样式表文件sort.css
h1{text-align: center; color: blue;} 
table{font-size: 12px; font-family: arial; background-color: black; text-align: center;} 
td{background-color: white;} 
.base{background-color: #0FF;} 
.light{background-color: #0DD;} 
.title{background-color: #3FF; text-align: center;}
PHP 相关文章推荐
PHP截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
封装一个PDO数据库操作类代码
Sep 09 PHP
php 运行效率总结(提示程序速度)
Nov 26 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
国外十大最流行的PHP框架排名
Jul 04 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 PHP
PHP实现的迷你漂流瓶
Jul 29 PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
Laravel关系模型指定条件查询方法
Oct 10 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 #PHP
PHP实现手机归属地查询API接口实现代码
Aug 27 #PHP
PHP 图片水印类代码
Aug 27 #PHP
PHP setTime 设置当前时间的代码
Aug 27 #PHP
PHP 透明水印生成代码
Aug 27 #PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 #PHP
php实现快速排序法函数代码
Aug 27 #PHP
You might like
php分页代码学习示例分享
2014/02/20 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
说一说Python logging
2016/04/15 Python
简单易懂的python环境安装教程
2017/07/13 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
Django之PopUp的具体实现方法
2019/08/31 Python
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
负责人任命书范本
2014/06/04 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript
Python pandas求方差和标准差的方法实例
2021/08/04 Python