K先生个人博客

当前位置:首页 > 爱技术 > 正文

php冒泡排序和快速排序

冒泡排序原理:依次比较数组相邻的两个数,然后根据其大小做出排序,直至最后两位数。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。但其实在实际过程中也可以根据自己需要反过来用,大树往前放,小数往后放。

// 冒泡算法
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先生个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!

文章评论

* 必填
可选
可选

评论列表