经典排序算法之快速排序

/*原理:选择数组中的第一个元素为基准数,进行一趟扫描后将所有小于基准数的元素放置在左边数组;所有大于基准数的元素放置在右边数组;
直到子数组中的元素小于或者等于一个元素,最后将其合并为一个数组输出*/
function quick_sort($arr=array(),$len=0){
	//判断数组中的元素个数如果小于等于1则返回该数组
	if($len<=1){
		return $arr;
	}
	//选择基准数
	$base_num=$arr[0];
	//创建两个左右数组分别放置一趟扫描后放置的元素
	$left_arr=array();
	$right_arr=array();
	for ($i=0; $i < $len; $i++) { 
		if($arr[i]<$base_num){
			$left_arr[]=$arr[$i];//将小于基准数的元素放置左边数组的末尾此方法和array_push方法相同执行时间较快
		}
		else{
			$right_arr[]=$arr[$i];
		}
	}
	$left_len=count($left_arr);
	$left_arr=quick_sort($left_arr,$left_len);//对左边数组进行递归调用再次快速排序;
	$right_len=count($right_arr);
	$right_arr=quick_sort($right_arr,$right_len);//对右边数组进行递归调用再次快速排序;

	return array_merge($left_arr,array($base_num),$right_arr)//将数组进行合并输出;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值