快速排序

来源:互联网 发布:mac chrome允许flash 编辑:程序博客网 时间:2024/06/07 14:19
/** * 快速排序----代码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
原创粉丝点击