PHP 利用 快速排序算法 對數組進行排序

<?php
	/**
	 * 用快速排序方法進行數組排序
	 * User: knight
	 * Date: 2017/11/3
	 * Time: 13:34
	 */

	/**
	 * 快速排序:
	 * 再數組中去一個值做爲標準(通常以數組第一個元素做爲標準)
	 * 遍歷這個這個數組除標準元素外 全部元素 用來與標準元素進行比較
	 * 若是比標準元素小 則放入左邊的數組,不然放入又邊的數組
	 *
	 * 而後針對 左邊數組 與 右邊數組 繼續執行上面操做(逆序反之)
	 *
	 * 而後按照順序 將 左邊數組,標準元素,右邊數組 合併 爲一個數組 獲得排序後的結果
	 *
	 *
	 */
	//待排序數組
	$arr = [1,8,5,6,78,54,12,98,56,32,54,12,98,65,32,45,84,59];
	//快速排序函數
	function quickSort($arr,$way='ASC')
	{
		if(!is_array($arr)){
			return false;
		}
		//數組若只有一元素則不須要排序
		$length = count($arr);
		if($length <= 1){
			return $arr;
		}
		$left=$right=[];
		for($i=1;$i<$length;$i++){
			if($arr[$i]<$arr[0]){
				$way == 'ASC' ? array_push($left,$arr[$i]) : array_push($right,$arr[$i]);
			}else{
				$way == 'ASC' ? array_push($right,$arr[$i]) : array_push($left,$arr[$i]);
			}
		}
		$right = quickSort($right,$way);
		$left  = quickSort($left,$way);
		return array_merge($left,[$arr[0]],$right);
	}

	var_dump(quickSort($arr,'DESC'));
相關文章
相關標籤/搜索