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 form 表单传参明细研究
Jul 17 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
Feb 16 PHP
php smarty 二级分类代码和模版循环例子
Jun 01 PHP
php调用Google translate_tts api实现代码
Aug 07 PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
Sep 29 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
PHP实现字母数字混合验证码功能
Jul 11 PHP
laravel-admin自动生成模块,及相关基础配置方法
Oct 08 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 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生成html分页列表的代码
2007/03/18 PHP
PHP实现验证码校验功能
2017/11/16 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
js实现图片实时时钟
2020/01/15 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
python标准日志模块logging的使用方法
2013/11/01 Python
Python闭包实现计数器的方法
2015/05/05 Python
详解Python中for循环是如何工作的
2017/06/30 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
django框架两个使用模板实例
2019/12/11 Python
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
深入剖析HTML5 内联框架iFrame
2016/05/04 HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
教师考核材料
2014/05/21 职场文书
经销商年会策划方案
2014/05/29 职场文书
离婚协议书范本(通用篇)
2014/11/30 职场文书
2015年重阳节主持词
2015/07/04 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js
MySQL视图概念以及相关应用
2022/04/19 MySQL