線性時間選擇

2021-09-13 01:59:17 字數 948 閱讀 2264

給定n個元素和1個k,1<=k<=n,要求找出這n個元素中第k小的元素。

#include

#include

#include

using

namespace std;

//快排

intpartition

(int a,

int low,

int high)

while

(i < j && a[j]

> pivot)

if(i < j)}if

(a[i]

> pivot)

swap

(a[i]

, a[low]);

return i;

}//利用隨機數種子隨機分配乙個基準數

intrandompartition

(int a,

int low,

int high)

//線性時間選擇核心演算法

intrandomselect

(int a,

int low,

int high,

int k)

int i =

randompartition

(a, low, high)

;//隨機分割槽

int j = i - low +1;

//區間長度,從low位置算起

if(j < k)

return

randomselect

(a, low, i, k)

;//當前區間長度比k小,說明第k小的數在左區間

}int

main()

; cout <<

randomselect

(a,0,7

,6)<< endl;

return0;

}

線性時間選擇

今天學習了線性時間選擇,主要是通過快排的方法,在乙個平均時間線性的情況下進行第k小元素的選擇,結合一道題目進行描述 題目來自演算法設計與分析就是王曉東的那本 output.txt 這題目分析一下可以得出就是尋找中位數 為什麼呢?將這些數字排列在數軸上尋找乙個到各個點距離最小的那個點,可以得知最中間的...

線性時間選擇

出自 http algorithm.chaoskey.com 02 07 題目 給定線性序集中n個元素和乙個整數k,1 k n,要求找出這n個元素中第k小的元素,這裡給定的線性集是無序的 具體解題 這裡我們將所有的數 n個 以每5個劃分為一組,共 n 5 組 將不足五個的那組忽略 然後用任意一種排序...

線性時間選擇

這相當於是對於快速排序的基準選擇的乙個優化,使得選擇演算法達到線性時間。include include include includevoid swap int a,int b int compare const void a,const void b int partition int a,int...