資源簡介
1.問題描述 設(shè)計(jì)算法實(shí)現(xiàn)在一個(gè)具有在n各互不相同元素的數(shù)組A[1…n]中找出所有前k個(gè)最小元素的問題,這里k不是常量,即它是輸入數(shù)據(jù)的一部分。要求算法的時(shí)間復(fù)雜性為Θ(n)。 2. 具體要求 輸入的第一行是一個(gè)正整數(shù)m,表示測(cè)試?yán)齻€(gè)數(shù)。接下來幾行是m個(gè)測(cè)試?yán)臄?shù)據(jù),每個(gè)測(cè)試?yán)臄?shù)據(jù)由三行組成,其中其中,第一行輸入一個(gè)正整數(shù)n,表示元素的個(gè)數(shù);第二行輸入n個(gè)整數(shù),整數(shù)之間用一個(gè)空格隔開。第三行輸入一個(gè)正整數(shù)k,表示求該組測(cè)試?yán)械那発個(gè)最小元素。(設(shè)給出的每個(gè)整數(shù)序列中的元素是唯一的。) 輸出:對(duì)于每個(gè)測(cè)試?yán)敵鲆恍校蒶個(gè)整數(shù)組成,表示輸入的n個(gè)整數(shù)中前k個(gè)最小元素。整數(shù)之間用一個(gè)空格隔開。
代碼片段和文件信息
#include
#define?M?100
#define?N?5
/*..利用快速排序?qū)?shù)組按升序排序..*/
int?partition?(int?key[]int?lowint?high)
{?
int?k;
k?=?key[low];
while(low? {
while(low=?k)?high--;
key[low]?=?key[high];
while(low key[high]?=?key[low];
}
key[low]?=?k;
return?low;
}
void?QSort(int?str[]int?lowint?high)
{
int?k;
if(low? {
??????k?=?partition(strlowhigh);
??QSort(strlowk-1);
??QSort(strk+1high);
}
}
/*...求中項(xiàng)...*/
void?mid(int?s[]int?i?int?r[])
{
int?j=5*i;
QSort(sjj+4);
r[i]=s[j+2];
}
/*...求數(shù)組的第K小元素...*/
int??select(int?A[]int?pint?k)
{
int?qi=0jst;
int?mc[M]small[M]mid1[M]big[M];
if(p<44)?
{
/*...直接排序...*/
QSort(A0p-1);
return?A[k-1];
}
/*...分成q組,每組5個(gè)元素...*/
q=p/5;
/*...求各組中項(xiàng)...*/
for(j=0;j {
mid(Ajc);
}
/*...遞歸調(diào)用求中項(xiàng)
評(píng)論
共有 條評(píng)論