php冒泡 插入选择 排序,说说PHP数组的三种排序(冒泡/选择/插入)方法

说说PHP数组的三种排序(冒泡/选择/插入)方法

PHP

#数组 #排序 #冒泡 #选择 #插入2012-05-30 10:17

一、冒泡排序法

说明:找到最大的数,排列到最后面,然后继续找

例:

$arr = array(3,5,-1,0,2);

for($i=0;$i

for($j=0;$j

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

$temp = $arr[$j];

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

$arr[$j+1]=$temp;

}

}

}

理解:

3,5,-1,0,2

//从第一个数开始往后比较,如果比后面的数大则与后面的数调位置

//第一次,3小于5,那么不变

//第二次,5大于-1,那么变成

3,-1,5,0,2

//第三次,5大于0

3,-1,0,5,2

//第四次,5大于2

3,-1,0,2,5

至此完成一次内循环,此时最后一个数完成排序,下次将不参与

3,-1,0,2,5

第二次外循环开始

第一次:3大于-1

-1,3,0,2,5

第二次:3大于0

-1,0,3,2,5

第三次:3大于2

-1,0,2,3,5

至此完成后面两位数的排序了,接下来类推

-1,0,2,3,5

二、选择排序法

说明:先假设第一个数就是最小的数,然后将后面的数依次与它比较,如果假设的数不是最小的数,就将它与后面的最小的数调换位置

$arr=array(2,1,-1,3,0);

for($i=0;$i

$minval = $arr[$i];

$minindex = $i;

for($j=1+$i;$j

if($arr[$j]

$minval = $arr[$j];

$minindex = $j;

}

}

$temp = $arr[$i];

$arr[$i] = $arr[$minindex];

$arr[$minindex] = $temp;

}

理解:

2,1,-1,3,0

//先假设第一个数2为最小值,它后面的数依次与2做比较,寻找到最小的那个数

过程:

1小于2,那么minval=1

-1小于1,那么minval=-1

3大于-1,不变

0大于-1,不变

那么现在就找到了该数组中最小的数了为-1

将-1与2调换位置就完成第一个数的排序了

那么现在数组变成

-1,1,2,3,0

现在第一个数-1已经为有序,所以不参与比较了,往后面继续

现在假设minval=1

2大于1,不变

3大于1,不变

0小于1,那么minval=0

现在一次循环完成,调换0与1的位置完成第二个数的排序

那么现在数组变成

-1,0,2,3,1

//后面的推法与上面相同。。。

三、插入排序法

说明:先假设一个数组中的第一个数为单独的有序数组,再将后面的一个数与它【这里随它I的增长,就变成它们了】做比较,如果后面的数比假设的数还小,则将小的那个数后移,最后将那个数移到最前面

$arr=array(2,1,-1,3,0);

for($i=1;$i

$insertval=$arr[$i];

$insertindex = $i-1;

while($insertindex>=0 && $insertval

$arr[$insertindex+1]=$arr[$insertindex];

$insertindex--;

}

$temp = $arr[$i];

$arr[$insertindex+1]=$insertval;

}

理解:

2,1,-1,3,0

//第一次,先保存待插入的数1为insertval,再拿 insertval 与2比较,1小于2,所以把2后移,变成如下的图

2,2,-1,3,0

//此时2前面没有数字了,insertindex=0,所以比较完成,那么将insertval插入到寻找到的这个位置。变成如下图

1,2,-1,3,0

//此时,1,2变成有序数组

//第二次,先保存待插入的数-1为insertval,再拿insertval与2做比较,-1小于2,所以把2后移,变成如下图

1,2,2,3,0

//此时,再拿insertval与1做比较,-1小于1,那么把-1后移,变成如下图(这就是一个拿待插入数与前面的有序数组比较的过程)

1,1,2,3,0

//此时,insertindex到头了,所以将insertval插入该位置

-1,1,2,3,0

//后面推法如上

相关文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值