常见算法找到无序数组的第k个,采用的方法:
利用快排的思想,每个找到下标index,比较
基本思想:
首先选取数组第一个元素temp,然后经过一次循环,找到index下标,使得前面的值比该temp小,后面的值比该temp大,这样就将数组分成了2个子数组,并且排好了temp的位置index;然后分别按上面将子数组继续执行,直到子数组为空。平均时间复杂度nlog(n)。(每次平均分成了log(n)组,每次找index (快速划分)时间复杂度O(n)。) 其中快速划分平均时间复杂度O(n)。
partition每次是不稳定的,快排是不稳定的。
基本的快排算法:
function quickSort(&$arr,0,count($arr)-1);
function quickSort(&$arr,$begin,$end)
{
if(false==is_array($arr)) return false;
if($end<$begin) return;
$temp=$arr[$begin];
$i=$begin;$j=$end;
while($i<$j){
while($i<$j&&$arr[$j]>$temp){
$j--;
}
$arr[$i]=$arr[$j] ;
while($i<$j&&$arr[$i]<=$temp){
$i++;
}
$arr[$j]=$arr[$i];
}
$arr[$i