輸出前m大的數

2021-08-17 12:26:22 字數 943 閱讀 2309

o(n+mlogm)

n為快排中線性掃瞄時間,mlogm為對m各最大數進行歸併排序耗時

#includeusing namespace std;

int a[100];

void swap(int &a, int &b)

void merge(int a,int s,int m, int e, int tmp)//歸併 把每一小部分歸為有序

else

} while(p1 <= m)//把剩餘可能部分的加入歸併結果

tmp[pt++] = a[p1++];

while(p2 <= e)

tmp[pt++] = a[p2++];

for(int i = 0; i < e-s+1; ++i)

}void mergesort(int a,int s, int e,int tmp) }

void arrangeright(int *a, int s, int e, int k)//利用線性時間找出前k大的數放在右邊

//如果右邊的數剛好為e-i+1為k個

if(k == e - i + 1)

return;

//右邊的數大於k個

else if(k < e - i + 1)

//右邊的數小於k個,需要左邊取出k - (e-i+1)個

else

}int main()

; int tmp[11];

int n = sizeof(a)/sizeof(int);

int m;

scanf("%d",&m);

arrangeright(a,0,n-1,m);

mergesort(a,n-m,n-1,tmp);

for(int i = 0; i < n; ++i)

return 0;

}

輸出前m大的數

描述 給定乙個陣列包含n個元素,統計前m大的數並且把這m個數從大到小 輸出。輸入 第一行包含乙個整數n,表示陣列的大小。n 100000。第二行包含n個整數,表示陣列的元素,整數之間以乙個空格分開 每個整數的絕對值不超過100000000。第三行包含乙個整數m。m n。輸出從大到小輸出前m大的數,每...

Python 輸出前m大的數

給定乙個陣列包含n個元素,統計前m個大的數,並把這m大的數從大到小排列給出 第一行為乙個整數,表述要輸出的前m個數 第二行為n個整數,給出需要排序的陣列 從大到小的m大的數 先找m個大的放在陣列右邊然後再進行排序。找m個大的排在右邊的思想是對整個陣列進行一次快速排序,看返回的中間位置到陣列最後的大小...

輸出前m大的數(快排)

描述 給定乙個陣列,統計前m大的數並且把這k個數從大到小輸出。輸入第一行包含乙個整數n,表示陣列的大小。n 100000。第二行包含n個整數,表示陣列的元素,整數之間以乙個空格分開。每個整數的絕對值不超過100000000。第三行包含乙個整數m。m n。輸出從大到小輸出前m大的數,每個數一行。樣例輸...