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 正则匹配函数体
Aug 25 PHP
PHP学习笔记之二 php入门知识
Jan 12 PHP
PHP中最容易忘记的一些知识点总结
Apr 28 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
php根据日期判断星座的函数分享
Feb 13 PHP
ThinkPHP跳转页success及error模板实例教程
Jul 17 PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
Laravel框架文件上传功能实现方法示例
Apr 16 PHP
Laravel框架自定义公共函数的引入操作示例
Apr 16 PHP
PHP中遍历数组的三种常用方法实例分析
Jun 24 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 事件机制(2)
2011/03/23 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
详细讲解Python中的文件I/O操作
2015/05/24 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
python障碍式期权定价公式
2019/07/19 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
工程班组长岗位职责
2013/12/30 职场文书
支行行长竞聘报告
2014/11/06 职场文书
小学生安全保证书
2015/05/09 职场文书
2016新年感言
2015/08/03 职场文书
爱护公物主题班会
2015/08/17 职场文书