PHP冒泡排序
冒泡排序
对数组$arr = [1,7,5,3,3,2]
按从小到大进行排序
$arr = [1,7,5,3,3,2];
function order($arr)
{
$length = count($arr);
for ($i=0;$i<$length-1;$i++)
{
for ($j=0;$j<$length-1-$i;$j++)
if($arr[$j]>$arr[$j+1])
{
$temp = $arr[$j+1];
$arr[$j+1] = $arr[$j];
$arr[$j] = $temp;
}
else
{
break;
}
}
return $arr;
}
var_dump(order($arr));
得到结果
array(6) {
[0] =>
int(1)
[1] =>
int(2)
[2] =>
int(3)
[3] =>
int(3)
[4] =>
int(5)
[5] =>
int(7)
}
比较,逻辑大致是这样的。
当i=0
的时候进行第一次冒泡
j=0
=> 1-7
比较,7比1大,不做改变 [1,7,5,3,3,2]
j=1
=> 7-5
比较,5比7小,交换位置 [1,5,7,3,3,2]
j=2
=> 7-3
比较,3比7小,交换位置 [1,5,3,7,3,2]
j=3
=> 7-3
比较,3比7小,交换位置 [1,5,3,3,7,2]
j=4
=> 7-2
比较,3比7小,交换位置 [1,5,3,3,2,7]
这样就进行了一次冒泡,得到了最大值 7
当i=1
的时候进行第二次冒泡
j=0
=> 1-5
比较,5比1大,不做改变 [1,5,3,3,2,7]
j=1
=> 5-3
比较,3比5小,交换位置 [1,3,5,3,2,7]
j=2
=> 5-3
比较,3比5小,交换位置 [1,3,3,5,2,7]
j=3
=> 5-2
比较,2比5小,交换位置 [1,3,3,2,5,7]
这样就进行了二次冒泡,得到了最大值 5
当i=2
的时候进行第三次冒泡
j=0
=> 1-3
比较,3比1大,不做改变 [1,3,3,2,5,7]
j=1
=> 3-3
比较,两个一样大,不做改变 [1,3,3,2,5,7]
j=2
=> 3-2
比较,2比3小,交换位置 [1,3,2,3,5,7]
这样就进行了三次冒泡,得到了最大值 3
当i=3
的时候进行第四次冒泡
j=0
=> 1-3
比较,3比1大,不做改变 [1,3,2,3,5,7]
j=1
=> 3-2
比较,2比3小,交换位置 [1,2,3,3,5,7]
这样就进行了四次冒泡,得到了最大值 3
当i=4
的时候进行第五次冒泡
j=0
=> 1-2
比较,2比1大,不做改变 [1,2,3,3,5,7]
这样就进行了五次冒泡,得到了最大值 2
文章参考 http://www.cnblogs.com/shen-hua/p/5422676.html