当前位置:首页 » 编程语言 » php冒泡算法

php冒泡算法

发布时间: 2023-01-12 23:21:24

1. php冒泡排序怎么排

按照你的要求,编写的冒泡排序的PHP程序如下

(注意因为键的值是字符串类型,所以按照字符大小从小到大排序)

原理是把键值对数组拆成键值的二维数组,然后根据值排序,最后再组装成键值对数组

<?php

$a=Array("a"=>"107","b"=>"5448","c"=>"522");

foreach($a as $k=>$v) $d[] = array($k, $v);

for($i=0;$i<count($d)-1;$i++){

for($j=0;$j<count($d)-1-$i;$j++){

if($d[$j][1]>$d[$j+1][1]){

$temp=$d[$j];

$d[$j]=$d[$j+1];

$d[$j+1]=$temp;
}

}

}

$arr = array();

foreach($d as $v) $arr[$v[0]] = $v[1];

var_mp($arr);

?>

2. 关于php的冒泡排序,请教一个问题

你的那个asort函数里面实现的就是类似他写的冒泡算法,排序算法有很多种。他只是用了自己写冒泡算法而已。没有像你使用了php自带的排序函数。

3. 用PHP如何实现冒泡排序

<?php//冒泡排序方法functionbubblesort(&$arr){
//定义一个变量保存交换的值
$temp=0;
for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr)-$i-1;$j++){
if($arr[$j]>$arr[$j+1]){
//如果前面的那个数大于后面的那个数,那么他们就进行交换
$temp=$arr[$j];$arr[$j]=$arr[$j+1];$arr[$j+1]=$temp;
}
}
}
}
$arr=array(100,99,200,5,-4,6,-7);
bubbleSort($arr);
print_r($arr);
//数组是值传递,所以传递的时候加个&符号就是地址传递,改变外部变量?>

4. PHP关于二维数组排序的问题!求大神帮忙

我用的是冒泡算法,代码如下:

<?php
$arr=array(
array(
'id'=>1,
'num'=>3,
'time'=>1522131034
),
array(
'id'=>2,
'num'=>7,
'time'=>1522132034
),
array(
'id'=>3,
'num'=>7,
'time'=>1522133034
),
array(
'id'=>4,
'num'=>7,
'time'=>1522134034
),
array(
'id'=>5,
'num'=>10,
'time'=>1522135034
),
array(
'id'=>6,
'num'=>0,
'time'=>1522136034
)
);
$t=count($arr);
$tmp=array();
for($i=0;$i<$t;$i++)
{
for($j=$i+1;$j<$t;$j++)
{
if($arr[$i]['num']>$arr[$j]['num'])
{
$tmp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$tmp;
}elseif($arr[$i]['num']==$arr[$j]['num'])
{
if($arr[$i]['time']>$arr[$j]['time'])
{
$tmp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$tmp;
}
}
}
}
print_r($arr);
?>

5. php冒泡排序法~呢

$arr=array(1,43,54,62,21,66,32,78,36,76,39);
functiongetpao($arr)
{
$len=count($arr);//设置一个空数组用来接收冒出来的泡//该层循环控制需要冒泡的轮数
for($i=1;$i<$len;$i++)
{//该层循环用来控制每轮冒出一个数需要比较的次数
for($k=0;$k<$len-$i;$k++)
{if($arr[$k]>$arr[$k+1])
{
$tmp=$arr[$k+1];
$arr[$k+1]=$arr[$k];
$arr[$k]=$tmp;
}
}
}return$arr;
}

网页链接

6. PHP实现常见的排序算法

注:为方便描述,下面的排序全为正序(从小到大排序)

假设有一个数组[a,b,c,d]
冒泡排序依次比较相邻的两个元素,如果前面的元素大于后面的元素,则两元素交换位置;否则,位置不变。具体步骤:
1,比较a,b这两个元素,如果a>b,则交换位置,数组变为:[b,a,c,d]
2,比较a,c这两个元素,如果a<c,则位置不变,数组变为:[b,a,c,d]
3,比较c,d这两个元素,如果c>d,则交换位置,数组变为:[b,a,d,c]
完成第一轮比较后,可以发现最大的数c已经排(冒)在最后面了,接着再进行第二轮比较,但第二轮比较不必比较最后一个元素了,因为最后一个元素已经是最大的了。
第二轮比较结束后,第二大的数也会冒到倒数第二的位置。
依次类推,再进行第三轮,,,
就这样最大的数一直往后排(冒),最后完成排序。所以我们称这种排序算法为冒泡排序。

选择排序是一种直观的算法,每一轮会选出列中最小的值,把最小值排到前面。具体步骤如下:

插入排序步骤大致如下:

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。

步骤:
从数列中挑出一个元素,称为 “基准”(pivot),
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

7. 一帖看懂PHP面试必考题:什么是冒泡排序

//首先定义一个数组;
<?php
$arr=array(23,5,26,4,9,85,10,2,55,44,21,39,11,16,55,88,421,226,588);
// 计算数组的长度;
$n =count($arr);
// 外层循环n-1
for($h=0;$h<$n-1;$h++){
//内层循环n-h-1
for($i=0;$i<$n-$h-1;$i++){
//判断数组大小,颠倒位置(从小往大排序,还是从大往小)
if($arr[$i]>$arr[$i+1]){
//定义空容器$kong,然后将两个判断中大的装进去
$kong=$arr[$i+1];
//大的这时就空了,然后将小的装进去
$arr[$i+1]=$arr[$i];
//然后将小的在装到空的进去。这就实现了从小往大排序,从大往小与此相反
$arr[$i]=$kong; }
}}
最后运行结果如下:
php编程冒泡排序
完整代码粘贴如下:
//冒泡排序
$arr=array(23,5,26,4,9,85,10,2,55,44,21,39,11,16,55,88,421,226,588);
$n =count($arr);
//echo $n;
for($h=0;$h<$n-1;$h++){//外层循环n-1
for($i=0;$i<$n-$h-1;$i++){
if($arr[$i]>$arr[$i+1]){//判断数组大小,颠倒位置
$kong=$arr[$i+1];
$arr[$i+1]=$arr[$i];
$arr[$i]=$kong;
}
}
}
var_mp($arr);

8. 用PHP写冒泡排序法

function bubble_sort($array)
{
$count = count($array);
if($count <= 0)
{
return false;
}
for($i=0; $i<$count; $i++)
{
for($k=$count-1; $k>$i; $k--)
{
if($array[$k] < $array[$k-1])
{
$tmp = $array[$k];
$array[$k] = $array[$k-1];
$array[$k-1] = $tmp;
}
}
}
return $array;
}
$arr = array(3, 5, 1, 4, 2);
$s = bubble_sort($arr);
print_r($s);

拿去改吧

9. php几种排序算法实例详解

四种排序算法的PHP实现:
1)插入排序(InsertionSort)的基本思想是:
每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

2)选择排序(SelectionSort)的基本思想是:
每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。

3)冒泡排序的基本思想是:
两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。

4)快速排序实质上和冒泡排序一样,都是属于交换排序的一种应用。所以基本思想和上面的冒泡排序是一样的。

1.sort.php文件如下:

<?php
classSort{
private$arr=array();
private$sort='insert';
private$marker='_sort';
private$debug=TRUE;
/**
*构造函数
*
*@paramarray例如:
$config=array(
'arr'=>array(22,3,41,18),//需要排序的数组值
'sort'=>'insert',//可能值:insert,select,bubble,quick
'debug'=>TRUE//可能值:TRUE,FALSE
)
*/
publicfunctionconstruct($config=array()){
if(count($config)>0){
$this->_init($config);
}
}
/**
*获取排序结果
*/
publicfunctiondisplay(){
return$this->arr;
}
/**
*初始化
*
*@paramarray
*@returnbool
*/
privatefunction_init($config=array()){
//参数判断
if(!is_array($config)ORcount($config)==0){
if($this->debug===TRUE){
$this->_log("sort_init_param_invaild");
}
returnFALSE;
}
//初始化成员变量
foreach($configas$key=>$val){
if(isset($this->$key)){
$this->$key=$val;
}
}
//调用相应的成员方法完成排序
$method=$this->sort.$this->marker;
if(!method_exists($this,$method)){
if($this->debug===TRUE){
$this->_log("sort_method_invaild");
}
returnFALSE;
}
if(FALSE===($this->arr=$this->$method($this->arr)))
returnFALSE;
returnTRUE;
}
/**
*插入排序
*
*@paramarray
*@returnbool
*/
privatefunctioninsert_sort($arr){
//参数判断
if(!is_array($arr)ORcount($arr)==0){
if($this->debug===TRUE){
$this->_log("sort_array(insert)_invaild");
}
returnFALSE;
}
//具体实现
$count=count($arr);
for($i=1;$i<$count;$i++){
$tmp=$arr[$i];
for($j=$i-1;$j>=0;$j--){
if($arr[$j]>$tmp){
$arr[$j+1]=$arr[$j];
$arr[$j]=$tmp;
}
}
}
return$arr;
}
/**
*选择排序
*
*@paramarray
*@returnbool
*/
privatefunctionselect_sort($arr){
//参数判断
if(!is_array($arr)ORcount($arr)==0){
if($this->debug===TRUE){
$this->_log("sort_array(select)_invaild");
}
returnFALSE;
}
//具体实现
$count=count($arr);
for($i=0;$i<$count-1;$i++){
$min=$i;
for($j=$i+1;$j<$count;$j++){
if($arr[$min]>$arr[$j])$min=$j;
}
if($min!=$i){
$tmp=$arr[$min];
$arr[$min]=$arr[$i];
$arr[$i]=$tmp;
}
}
return$arr;
}
/**
*冒泡排序
*
*@paramarray
*@returnbool
*/
privatefunctionbubble_sort($arr){
//参数判断
if(!is_array($arr)ORcount($arr)==0){
if($this->debug===TRUE){
$this->_log("sort_array(bubble)_invaild");
}
returnFALSE;
}
//具体实现
$count=count($arr);
for($i=0;$i<$count;$i++){
for($j=$count-1;$j>$i;$j--){
if($arr[$j]<$arr[$j-1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j-1];
$arr[$j-1]=$tmp;
}
}
}
return$arr;
}
/**
*快速排序
*@bywww.5wx.org
*@paramarray
*@returnbool
*/
privatefunctionquick_sort($arr){
//具体实现
if(count($arr)<=1)return$arr;
$key=$arr[0];
$left_arr=array();
$right_arr=array();
for($i=1;$i<count($arr);$i++){
if($arr[$i]<=$key)
$left_arr[]=$arr[$i];
else
$right_arr[]=$arr[$i];
}
$left_arr=$this->quick_sort($left_arr);
$right_arr=$this->quick_sort($right_arr);

returnarray_merge($left_arr,array($key),$right_arr);
}
/**
*日志记录
*/
privatefunction_log($msg){
$msg='date['.date('Y-m-dH:i:s').']'.$msg.' ';
return@file_put_contents('sort_err.log',$msg,FILE_APPEND);
}
}
/*Endoffilesort.php*/
/*Locationhtdocs/sort.php*/
2.sort_demo.php文件如下:

<?php
require_once('sort.php');
$config=array(
'arr'=>array(23,22,41,18,20,12,200303,2200,1192),
//需要排序的数组值
'sort'=>'select',
//可能值:insert,select,bubble,quick
'debug'=>TRUE
//可能值:TRUE,FALSE
);
$sort=newSort($config);
//var_mp($config['arr']);
var_mp($sort->display());
/*Endofphp*/

10. PHP 怎么用冒泡算法进行排序呢

1.你必须使用冒泡算法吗?如果不是的话,我给你一个简单点的排序方法,就是循环数组,提取出A列或者B列的值及对应的数组,使用asort()根据值大小排序就将索引顺序排好了,然后循环一遍对应到以前的数组(或者干脆赋值给一个新数组);
2.考虑到你需要对B分组,然后对组内根据A排序,建议先对A排序,然后循环数组,以每个组的b列值为键,赋给一个新的数组,类似这样:
foreach($arr as $k=>$v){
$result[$v[1]][] = $v;
}
然后按照1的方法对外层排序。

热点内容
c语言中π怎么打 发布:2025-07-14 09:56:35 浏览:574
颜料解压 发布:2025-07-14 09:49:57 浏览:463
python按任意键 发布:2025-07-14 09:49:19 浏览:291
内置存储交换位置 发布:2025-07-14 09:33:10 浏览:647
甲壳虫密码如何解锁 发布:2025-07-14 09:23:55 浏览:823
解压专家解压迅雷云盘 发布:2025-07-14 09:11:09 浏览:910
编程基础教学 发布:2025-07-14 09:09:48 浏览:94
电脑板能进入的手机版服务器 发布:2025-07-14 09:08:10 浏览:555
roblox电脑版服务器推荐 发布:2025-07-14 09:06:07 浏览:807
application缓存 发布:2025-07-14 09:01:56 浏览:345