PHP快速排序法(其中一种解法)!

今天理解了一下快速排序这个算法 题解如下:

1)从数列中挑出一个元素,称该元素为“基准”。

(2)扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排在基准后面。

(3)通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。
	$arr = array(50,30,100,70,9,19);
	function QuickSort($arr) {
    
    
		if( count($arr) < 1 ) {
    
     // 主要是判断最后一次递归的时候终止
			return $arr;
		}
		
		$left = $right = array(); // 变量left是承载比中间值小的数组  right是承载比中间值大的数组 一个在左边一个在右边
		$middle = $arr[0]; // 这个变量作为中间值
		for($i=1;$i<count($arr);$i++) {
    
     // 这里就循环排序所有的值
			if( $middle > $arr[$i] ) {
    
    
				$left[] = $arr[$i];
			} else {
    
    
				$right[] = $arr[$i];
			}
		}
		
		$left = QuickSort($left); // 递归很关键  关键 关键
		$right = QuickSort($right);// 递归很关键  关键 关键
		
		return array_merge($left,$middle,$right); // 用函数合并一下就好啦
		
	}

猜你喜欢

转载自blog.csdn.net/weixin_43944691/article/details/107906394