PHP 查詢陣列第i小元素

2021-09-06 06:06:30 字數 1450 閱讀 6026

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: 7

array ( [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...