快速排序

/**
 * 快速排序----代码1
 * @param $arr array
 * @return $new_arr array
 */

function QuickSort(){
	$num = count($arr);
	$l = $r = 0;

	for($i = 0; $i < $num; $i++){

		if( $arr[$i] < $arr[0] ){
			$left[] = $arr[$i];
			$l++;
		}else{
			$right[] = $arr[$i];
			$r++;
		}

	}

	if($l > 1){
		$left = QuickSort($left);
	}
	$new_arr = $left;
	$new[] = arr[0];

	if($r > 1){
		$right = QuickSort($right);
	}
	for($i = 0; $i < $r; $i++){
		$new_arr[] = $right[$i];
	}


	return $new_arr;
}

/**
 * 快速排序----代码2
 * @param $arr array
 * @return $new_arr array
 */

function QuickSort($arr){
	$num = count($arr);

	if($num > 1){

		$max = $arr[0];
		$left = array();
		$right = array();

		for($i = 1; $i < $num; $i++){
			if($max >= $arr[$i]){
				$left[] = $arr[$i];
			}else if($max < $arr[$i]){
				$right[] = $arr[$i];
			}
		}

		$left = QuickSort($left);
		$right = QuickSort($right);

		return array_merge($left,array($max),$right);
	
	}else{

		return $arr;

	}
}

 原理:快速排序使用分治思想来把待排序的数组分成两个子数组,具体步骤为:

         (1)从数列中挑出一个元素。成为元素的“基准”

         (2)遍历一遍数组将所用比基准小的元素放在左边,比基准大的元素放在右边

         (3)通过递归,将子数组划分为更小的数组。直到子数组的元素数量小于等于1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值