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+mysql写的简单留言本实例代码
Jul 25 PHP
攻克CakePHP系列二 表单数据显示
Oct 22 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
解析php下载远程图片函数 可伪造来路
Jun 25 PHP
php 地区分类排序算法
Jul 01 PHP
Yii框架登录流程分析
Dec 03 PHP
php中smarty变量修饰用法实例分析
Jun 11 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
Jan 29 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
php测试kafka项目示例
Feb 06 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获取当前url路径的函数以及服务器变量
2013/06/29 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
js实现拖拽功能
2017/03/01 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python pandas常用函数详解
2018/02/07 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
python协程之动态添加任务的方法
2019/02/19 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
python 画图 图例自由定义方式
2020/04/17 Python
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
机械制造毕业生求职信
2014/03/03 职场文书
创业培训计划书
2014/05/03 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
信访稳定工作汇报
2014/10/27 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android