演算法導論第九章9 3例題

2021-08-27 02:36:07 字數 815 閱讀 4527

該演算法對9.2例題中的partition函式進行改進,9.2中對劃分主元是隨機選擇,而在本**中主元的選擇更有目的性,演算法的思路是先將陣列每五個元素為一組,並進行插入排序,取這五個元素的中位數。同理將所有分組的中位數取出,並取出中位數的中位數。元師陣列的劃分基於該中位數的中位數進行,這樣劃分得到的兩個陣列將更加趨於合理。

**如下:

//例題9.2中的演算法的期望時間複雜度為o(n),而在9.3的例題中的最壞執行時間複雜度為o(n)。

//該演算法實現思路是將陣列每五個元素分為一組,最後一組可能不足五個。

//選出每一組中的中位數,然後選出這些中位數的中位數。根據這個中位數對陣列進行劃分為兩組。

//然後再按照9.。2中的方法遞迴呼叫劃分尋找第i小的數。

//該演算法的對比於9.2的改進之處在於對partition方法進行了優化,而不是隨進選擇陣列進行劃分。

#includeusing namespace std;

void insert_sort(int a,int p,int r)

if((i+4)<=r)

else

i+=5;

} j=j-1;

//對b中的元素進行排序

insert_sort(b,0,j);

//找到b中的中位數

num=b[j/2];

//將a中的num與a[r]替換

for(i=0;i<=r;i++)

temp=a[i];

a[i]=a[r];

a[r]=temp;

//根據找到的num對陣列進行劃分

j=p-1;

for(i=p;i

演算法導論 第九章

這章介紹了中位數和順序統計學 中位數即乙個序列中最中間的數字,在快速排序中非常有意義,在其它的一些應用中也很有效,因為可以2分序列,這樣會有更好的效率。這章主要介紹如何不排序來找到序列的順序,由於不需要排序,可以減少很多比較的操作,最終可以獲得一些線性的演算法,得到排名第i的數字。演算法的基礎是首先...

第九章例題

第九章 9 1 uva1025 include include using namespace std const int inf 99999999 bool has train 440 440 2 has train t i b 表示t時刻,在車站i是否有地鐵出發 int t 440 r 440 ...

演算法導論第九章習題9 3 7

在o n 時間範圍內找出陣列a n 中位數相鄰的k個數字 思路 簡單的思路是先找出中位數 n 1 2然後依次找第 n 1 2 1小數字 n 1 2 2小數字 n 1 2 3.小數字。n 1 2 k 2小數字,再找第 n 1 2 1小數字 n 1 2 2小數字 n 1 2 3.小數字。n 1 2 k ...