演算法設計與分析之線性時間選擇(C )

2021-09-28 19:32:48 字數 2786 閱讀 8145

例題二本部落格其他文章推薦

對於給定的n個元素的陣列a[0:n—1],要求從中找出第k小的元素

輸入:輸入有多組測試例。

對每乙個測試例有2行

第一行是整數n和k(1≤k<n≤1000)

第二行是n個整數

輸出:第k小的元素

我們知道,快速排序演算法的一次排序的思想是:

找到乙個數字作為標準,把比該數小的放左邊,比該數大的放右邊

#include

#include

#define n 100

using

namespace std;

//一維陣列容器

int a[n]

;//線性選擇演算法尋找第k小的元素

intlineartimeselection

(int

,int

,int);

intmain()

cout<<

"輸入陣列元素:"

;for

(int i=

0;i) cin>>a[i]

; cout<<

"查詢第幾小的元素:"

; cin>>k;

if(k > n || k <1)

cout<<

lineartimeselection(0

,n-1

,k);

return0;

}/*left 進行線性選擇的首位下標

right 進行線性選擇的末尾下標

k 尋找第k位小的元素

*/int

lineartimeselection

(int left,

int right,

int k)

while

(a[i]

< point);do

while

(a[j]

> point);if

(i>=j)

break

;swap

(a[i]

,a[j]);

}if(j-left+

1== k)

return point;

a[left]

= a[j]

; a[j]

= point;

if(j-left+

1< k)

return

lineartimeselection

(j+1

,right,k-

(j+1

-left));

//向右找

return

lineartimeselection

(left,j-

1,k)

;//向左找

}

某石油公司計畫建造一條由東向西的主輸油管道。該管道要穿過乙個有n口油井的油田。從每口油井都要有一條輸油管道沿最短路經(或南或北)與主管道相連。

如果給定n口油井的位置,即它們的x座標(東西向)和y座標(南北向),程式設計計算各油井到主管道之間的輸油管道最小長度總和。

輸入第1行是乙個整數n,表示油井的數量(1≤n≤10 000)

接下來n行是油井的位置,每行兩個整數x和y(-10 000≤x,y≤10 000)

輸出各油井到主管道之間的輸油管道最小長度總和

輸入樣例

51 2

2 21 3

3 -2

3 3輸出樣例

6樣例圖

//儲存油井的y值

int a[n]

;//線性時間選擇演算法

intlineartimeselection

(int

,int

,int);

intmain()

cout<

return0;

}int

lineartimeselection

(int left,

int right,

int k)

while

(a[i]

while

(a[j]

>point);if

(i>=j)

break

;swap

(a[i]

,a[j]);

}if(j-left+

1== k)

return point;

a[left]

= a[j]

; a[j]

= point;

if(j-left+

1< k)

return

lineartimeselection

(j+1

,right,k-

(j-left+1)

);return

lineartimeselection

(left,j-

1,k)

;}演算法設計與分析之分治策略練習(下)

演算法設計與分析之分治策略練習(上)

演算法設計與分析之分治策略

演算法設計與分析之遞迴演算法練習(下)

演算法設計與分析之遞迴演算法練習(上)

演算法設計與分析 遞迴與分治策略 線性時間選擇

問題描述 給定線性序集中n個元素和乙個整數k,1 k n.要求找出這n個元素中第k小的元素,即如果將這個n個元素依其線性序排列時,排在第k個位置的元素就是要找的元素,當k 1時,要找的就是最小的元素 當k n,就是最大的元素 當k n 1 2,稱為中位數。問題分析 在某些特殊的情況下,我們可以實現線...

經典演算法之線性時間選擇的C實現方法

線性時間選擇問題,實際上是隨機快速排序演算法的乙個引申,ie,通過對隨機快速排序演算法的小小改動就可以實現。源 如下 隨機選擇 author zhyh2010 date 20150606 version 1.0 description 隨機選擇 include include define num ...

期望為線性時間選擇演算法

一般選擇問題看起來要比我麼找最小值這樣的簡單問題更難。但這兩個問題的漸進執行時間卻是相同的 n randomized select演算法,以快速排序演算法為模型。與快速排序不同的是,快速排序會遞迴處理劃分的兩邊,而randomized select只處理劃分的一邊。快速排序執行的時間是 n n 而r...