您的位置:首页 > 编程语言 > PHP开发

PHP之冒泡排序

2015-07-02 10:46 591 查看
昨天去酷狗面试的时候,在笔试那一关,有道要求用PHP实现冒泡排序的编程题,因为实在太久没用过冒泡排序,忘记了算法的原理,结果留了空白,实在无语。因此今天把PHP的冒泡排序代码记录一下:

<?php
/**
* 冒泡排序
* @param array $numbers 要排序的数组,只限数字一维数组
* @param boolean $asc   排序顺序,true是正序,false是逆序
*/
function bubble_sort(array $numbers, $asc = true) {
$n = count($numbers);
// 外循环最多排(n - 1)次
$out_loop_cnt = $n - 1;
for ($i = 0; $i < $out_loop_cnt; $i++) {
// 内循环最多排(n - i - 1)次
$in_loop_cnt = $n - $i - 1;
for ($j = 0; $j < $in_loop_cnt; $j++) {
// 根据排序顺序判断相邻两个数是否符合交换条件
$swap = $asc ? ($numbers[$j] > $numbers[$j + 1])
: ($numbers[$j] < $numbers[$j + 1]);
if ($swap) {
$temp = $numbers[$j + 1];
$numbers[$j + 1] = $numbers[$j];
$numbers[$j] = $temp;
}
}
}

return $numbers;
}

$arr = [1, 3, 5, 8, 4];

var_dump(bubble_sort($arr));
/**
* 输出:
* array (size=5)
* 0 => int 1
* 1 => int 3
* 2 => int 4
* 3 => int 5
* 4 => int 8
*/

var_dump(bubble_sort($arr, false));
/**
* 输出:
* array (size=5)
* 0 => int 8
* 1 => int 5
* 2 => int 4
* 3 => int 3
* 4 => int 1
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 冒泡排序