建体彩网|中彩网双色球连号|
?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

和記娛樂在線官網:c語言算法分而治之算法選擇排序

?

對付給定的n 個元素的數組a [ 0 : n - 1 ],要求從中找出第k小的元素。當a [ 0 : n - 1 ]被排序時,該元素便是a [ k - 1 ]。假設n = 8,每個元素有兩個域k e y和I D,此中k e y是一個整數,I D是一個字符。假設這8個元素為[ ( 1 2 ,a),( 4 ,b),( 5 ,c),( 4 ,d),( 5 ,e),( 1 0 ,f),( 2 ,g),( 2 0 ,h)], 排序后獲得數組[ ( 2 ,g),( 4 ,d),( 4 ,b),( 5 ,c),( 5 ,e),( 1 0 ,f),( 1 2 ,a),( 2 0 ,h) ]。假如k = 1,返回I D為g 的元素;假如k = 8,返回I D為h 的元素;假如k = 6,返回是I D為f 的元素;假如k = 2,返回I D為d 的元素。實際上,對著末一種環境,和記娛樂在線官網所獲得的結果可能不獨一,由于排序歷程中既可能將I D為d 的元素排在a [ 1 ],也可能將I D為b 的元素排在a [ 1 ],緣故原由是它們具有相同大年夜小的k e y,因而兩個元素中的任何一個都有可能被返回。然則無論若何,假如一個元素在k = 2時被返回,另一個就必須在k = 和記娛樂在線官網3時被返回。

選擇問題的和記娛樂在線官網一個利用便是探求中值元素,此時k = [n / 2 ]。中值是一個很有用的統計量,例如中心人為,中心年歲,中心重量。其他k值也是有用的。例如,經由過程探求第n / 4 , n / 2和3 n / 4這三個元素,可將人口劃分為4份。

選擇問題可在O ( n l o g n )光陰內辦理,措施是首先對這n個元素進行排序(如應用堆排序式或歸并排序),然后掏出a [ k - 1 ]中的元素。若應用快速排序(如圖1 4 - 11所示),可以和記娛樂在線官網得到更好的勻稱機能,只管該算法有一個對照差的漸近繁雜性O( n2 )。

可以經由過程修寫法度榜樣1 4 - 6來辦理選擇問題。假如在履行兩個w h i l e輪回后支點元素a [ l ]被互換到a [ j ] ,那么a [ l ]是a [ l : j ]中的第j - l + 1個元素。假如要探求的第k 個元素在a [ l : r ]中,并且j - l + 1即是k,則謎底便是a [ l ];假如j - l + 1 < k,那么探求的元素是r i g h t中的第k - j + l - 1個元素,否則要探求的元素是left 中的第k個元素。是以,只需進行0次或1次遞歸調用。新代碼見法度榜樣1 4 - 7。S e l e c t中的遞歸調用可用f o r或w h i l e輪回來替代(演習2 5)。

法度榜樣14-7 探求第k 個元素

template

T Select(T a[], int n, int k)

{// 返回a [ 0 : n - 1 ]中第k小的元素

// 假定a[n] 是一個偽最大年夜元素

if (kn) throw OutOfBounds();

return select(a, 0, n-1, k);

}

template

T select(T a[], int l, int r, int k)

{// 在a [ l : r ]中選擇第k小的元素

if (l >= r) return a[l];

int i = l, // 從左至右的游標

j = r + 1; // 從右到左的游標

T pivot = a[l];

// 把左側>= pivot的元素與右側= pivot 的元素

i = i + 1;

} while (a[i]

do {// 在右側探求 pivot);

if (i >= j) break; // 未發明互換工具

Swap(a[i], a[j]);

}

if (j - l + 1 == k) return pivot;

// 設置p i v o t

a[l] = a[j];

a[j] = pivot;

// 對一個段進行遞歸調用

if (j - l + 1

法度榜樣1 4 - 7在最壞環境下的繁雜性是( n2 ),此時left 老是為空,而且第k個元素老是位于r i g h t.

假如假定n 是2的冪,則可以取消公式(2 - 1 0)中的向下取整操作符。經由過程應用迭代措施,可以獲得t (n) = (n)。若仔細地選擇支點元素,則最壞環境下的光陰開銷也可以變成(n)。一種選擇支點元素的措施是應用“中心的中心( m e d i a n - o f - m e d i a n)”規則,該規則首先將數組a中的n 個元素分成n/r 組,r 為某一整常數,除了著末一組外,每組都有r 個元素。然后經由過程在每組中對r 個元素進行排序來探求每組中位于中心位置的元素。著末根據所獲得的n/r 其中心元素,遞歸和記娛樂在線官網應用選擇算法,求得所必要的支點元素。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

建体彩网
分分彩计划方案 十三十三水俱乐部大全 老时时彩 捕鱼达人炮台 重庆快乐10分计划大全 大连港股票行情 江苏11选5下载 福彩中心主任推荐号码 真钱炸金花下载 足球比分推荐