1<?php2#
隨機選擇第i小的數字,用隨機快排實現34
#交換元素
5function swap(&$arr, $i, $j
) 1011#
隨機劃分
12function randomized_partition(&$arr, $begin, $end
) 1718#
劃分19
function partition(&$arr, $begin, $end
) 29
30while ($low
< $high && $arr[$high] >= $arr[$pivot
]) 33
34 swap($arr, $low, $high
);35}36
37#交換中樞元素
38if ($arr[$pivot] < $arr[$low
]) 41 swap($arr, $pivot, $low
);42
return
$low;43
}4445#
快速排序,此處沒用到
46function quick_sort(&$arr, $begin, $end
) 51
if ($q
< $end
) 54}55
56#選取第i小的數
57function randomized_select(&$arr, $begin, $end, $i
) 61
62$q = randomized_partition($arr, $begin, $end
);63
$k = $q - $begin + 1; #
k代表小於等於q的元素個數
6465
if ($k == $i) else
if ($i
< $k) else 72}
7374
$arr = array(1, 5, 3, 7, 0, 0, 8, 4, 2, 9, 11);
75$t = randomized_select($arr, 0, count($arr) - 1, 8);
76print_r("the 8th minimum element: ");
77echo "
";78 quick_sort($arr, 0, count($arr) - 1);
79print_r($arr
);80 ?>
the 8th minimum element: 7array ( [0] => 0 [1] => 0 [2] => 1 [3] => 2 [4] => 3 [5] => 4 [6] => 5 [7] => 7 [8] => 8 [9] => 9 [10] => 11 )
演算法 查詢陣列第i小的元素的演算法
1.乙個思路 怎麼同時找出乙個陣列的最大值和最小值,越快越好?1.1 一種最普通的辦法是設max min a 0 遍歷一遍陣列a,每個元素分別和max,min做比較,並對這兩個值進行相應的更新,這樣的話,比較次數為 2 n 1 1.2 這次,把這個陣列的元素分成每兩個元素一對,先不考慮奇偶性,然後這...
php查詢陣列元素,提速
1.in array 判斷陣列中元素是否存在 bool in array mixed needle array haystack bool strict false 第乙個引數 needle,待搜尋的字串,是區分大小寫的 第二個引數 用阿里比較的陣列 第三個引數預設是false true會判斷資料型...
陣列第k小的元素
要求複雜度在o n kua方法 使用分治策略,類似與快速排序的方法,先對陣列分組,然後判斷第k小的元素應該在哪個分組 然後遞迴該分組,最後求的第k小的元素 使用分段的思想求第k小的數 減治法 如 第1小的數是最小的數 思想 對於乙個陣列a 0.n 1 分段成a 0.s 1 a s a s 1.n 1...