php冒泡排序和快速排序
K先生
爱技术2480
冒泡排序原理:依次比较数组相邻的两个数,然后根据其大小做出排序,直至最后两位数。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。但其实在实际过程中也可以根据自己需要反过来用,大树往前放,小数往后放。
// 冒泡算法
function maopao($arr) {
for ($i = 0; $i < count($arr); $i++) {
for ($j = 0; $j < count($arr) - 1; $j++) {
if ($arr[$i] < $arr[$j]) { //依次比较大小
$tem = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tem;
}
}
}
return $arr;
}
快速排序:先随便取一个数组中的数作为中间值,然后拿去和数组中的每一个数作比较,比它小的数都统一放到一个数组,比它大的数也都放到一个数组,这样数组就被分为了三部分:左边数组(比中间值小)、中间值、右边数组(比中间值大)。然后继续递归用相同的方式来排序左边和右边,最后合并数组就行了。
function quick($arr) {
//需要确保数组长度不小于1,否则会报错
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 = quick($left_arr);
$right_arr = quick($right_arr);
//最后合并返回
return array_merge($left_arr, array($key), $right_arr);
}
怎么说呢,排序算法在实际开发中基本用不到,因为对于这样的排序只需要php的一个函数就轻轻松松实现了,sort($arr)就这几个字母就搞定了。
不过这些算法恐怕也就只有面试的时候才会用上吧。
作者:K先生本文地址:http://www.gold404.cn/info/27
版权声明:本文为原创文章,版权归 K先生个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!
文章评论
评论列表