<?php /** *分解:数组A[p..r]被分成两个子数组A[p,q-1]和A[q+1..r],使得A[p..q-1]中的每个元素都小于等于A[q],而且,小于等于A[q+1..r]中的元素,下标q也在这个划分过程中进行计算。 *解决:通过递归调用快速排序,对子数组A[p..q-1]和A[q+1..r]排序 *合并:因为两个子数组是就地排序的,将他们的合并不需要操作:整个数组A[p..r]已经排序。 */ function quick_sort($arr){ _quick_sort($arr,0,count($arr)-1); return $arr; } function _quick_sort(&$arr,$i,$j){ echo "aaa\n"; $pivot = $arr[$i]; $_i = $i; $_j = $j; while($i<$j){ while($arr[$j]>=$pivot && $i<$j) $j--; if($i<$j){ $arr[$i] = $arr[$j]; $i++; } while($arr[$i]<=$pivot && $i<$j) $i++; if($i<$j){ $arr[$j] = $arr[$i]; $j--; } } $arr[$i]=$pivot; if($_i<$i-1){ _quick_sort($arr,$_i,$i-1); } if($_j>$i+1){ _quick_sort($arr,$i+1,$_j); } } $a = array( 9,38, 65, 97, 76, 13, 27 ); $arr = quick_sort($a); //var_dump($arr); ?>
快速排序算法
博客迁移到大城小站