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 相关文章推荐
我的论坛源代码(八)
Oct 09 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
Jun 07 PHP
preg_match_all使用心得分享
Jan 31 PHP
smarty内置函数capture用法分析
Jan 22 PHP
PHP简单获取视频预览图的方法
Mar 12 PHP
PHP封装的Twitter访问类实例
Jul 18 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
Jan 20 PHP
java解析json方法总结
May 16 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 PHP
如何在PHP中使用AES加密算法加密数据
Jun 24 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 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
最省空间的计数器
2006/10/09 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
js实现tab切换效果
2017/02/16 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
python+PyQT实现系统桌面时钟
2020/06/16 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
python定时截屏实现
2020/11/02 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
2013年大学生的自我鉴定
2013/10/24 职场文书
问卷调查计划书
2014/01/10 职场文书
工程部文员岗位职责
2015/02/04 职场文书
2016年教师新年寄语
2015/08/18 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python