北京大學郭煒 輸出前m大的數

2021-10-24 14:13:35 字數 1268 閱讀 9636

給定乙個陣列包含n個元素,統計前m大的數並且把這m個數從大到小輸出。

感想:可能是我語文不好,總理解不了「前m大的數」是什麼意思,後來才搞明白,前m大的數就是這個陣列中,前m個比較大的資料:

比如:1234567

前3大的數就是:7 6 5

前4大的數就是:7 6 5 4

解題思路:

程式使用了快速排序的思想,將陣列中第乙個元素設定為key值,將小於key值的元素通過演算法放在key值左邊,大於key值的都放在key值右邊。直到key值右邊的個數與我們要找的m個數相等時,進行排序輸出就可以了。

#include

#include

"iostream"

using

namespace std;

void

swap

(int

&a,int

&b)/**

* 將key值分為兩半,前一半都比key小,後一半都比key大

* 注意,該模組不負責排序,只是用了快排思想

* @param a 要進行快排的陣列

* @param s 排序的起點

* @param e 排序的終點

* @param m 找出前m個比較大的數字

*/void

arrangeright

(int a,

int s,

int e,

int m)

swap

(a[i]

,a[j]);

while

(i=a[i]

)swap

(a[i]

,a[j]);

}//計算出右邊還有幾個數

int num = e-i+1;

//如果右邊僅有的數跟想要的個數(m)相等

if(num==m)

return

;//如果右邊剩下的數比想要的個數m還多,對i+1到end的那一部分快排

if(num>m)

else

}int

main()

;//用快速排序的思想找前m個比較大的數字

arrangeright

(a,0

,n-1

,m);

sort

(a+n-m,a+n,greater<

int>()

);cout<<

"最終結果"

int i=n-m;i)}

輸出前m大的數

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 歸併 把每...

輸出前m大的數

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

Python 輸出前m大的數

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