快速選擇演算法

2021-10-08 09:23:13 字數 1298 閱讀 1544

快排的每一趟,數軸的左邊都會是 <= x 的, 右邊都是 >= x 的。

左邊元素的個數是 s1 = j - l + 1, 如果k <= s1 的話,那麼下次遞迴的區間就是左邊,否則右邊。

直到 l == r 時返回q[l]。

時間複雜度:o(n)

c++ **

#include

using

namespace std;

const

int n =

1e5+10;

int n, k;

int q[n]

;int

quick_sort

(int l,

int r,

int k)

int s1 = j - l +1;

if(k <= s1)

quick_sort

(l, j, k)

;else

quick_sort

(j +

1, r, k- s1);}

intmain()

#include

using

namespace std;

const

int max =

100010

;int arr[max]=;

intquicksort

(int

*arr,

int l,

int r,

int k)

while

(arr[i]

< pivot);do

while

(arr[j]

> pivot);if

(i < j)

::swap

(arr[i]

, arr[j]);

}int len = j - l +1;

if(len >= k)

quicksort

(arr, l, j, k)

;else

quicksort

(arr, j+

1, r, k - len);}

intmain()

int value =

quicksort

(arr,

0, n -

1, m)

;

cout << value;

return0;

}

快速選擇演算法

摘要 選擇第k小的元素,用快速排序的思想可以以平均o nlogn 的時間界做到.1 首先找到中間值,並且進行排序。2 如果左邊的子串行的長度 s1 k 1,那麼很顯然中間值就是所求.3 如果左邊的子串行的長度 s1 k,那麼顯然這個所求元素就在子串行s1裡面,遞迴的在s1裡面求解 4 如果 s1 k...

Quick Selection(快速選擇演算法)

常年見到快速排序演算法,當在普林斯頓大學的網課上看到這個quick selection演算法的時候,直接蒙住了 這個是什麼,和快速排序有什麼關係啊?於是迅速查閱了維基百科,大致了解了其思想,再結合課程中的ppt,終於搞明白了。不得不說這是個很巧妙的演算法,把原先要o nlogn 複雜度的問題,簡化為...

快速選擇演算法c

quick selection演算法和quick sort演算法是由同乙個作者提出,這兩者之間有很大的相似之處 分治,即將問題的規模一次次的減小,直到求出最終解,時間複雜度o n 且資料無需有序。目標 找到第n大的數 隨機產生乙個pivot 根據這個pivot,將小於其值的數放左邊,大於其值的數放右...