Python 輸出前m大的數

2021-08-27 03:14:36 字數 1123 閱讀 1511

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

第一行為乙個整數,表述要輸出的前m個數

第二行為n個整數,給出需要排序的陣列

從大到小的m大的數

先找m個大的放在陣列右邊然後再進行排序。找m個大的排在右邊的思想是對整個陣列進行一次快速排序,看返回的中間位置到陣列最後的大小k,如果剛好等於m,就返回陣列;如果k>m,對右邊的再進行快速排序;如果k選取好後直接進行快速排序,獲得結果。

def maxk(nums,sta,end,k):

if sta>=end:

return

if len(nums)==k:

return nums

mid = nums[sta]

i = sta

j = end

while sta!=end:

while end>sta and nums[end]>=mid:

end-=1

nums[sta], nums[end] = nums[end], nums[sta]

while stak:

maxk(nums,sta+1,j,k)

return

if j - sta+1< k:

maxk(nums, i, sta-1, k-(j - sta+1))

return

def quicksort(nums,sta,end):

if sta>=end:

return

mid = nums[sta]

i = sta

j = end

while sta!=end:

while end>sta and nums[end]>=mid:

end-=1

nums[sta], nums[end] = nums[end], nums[sta]

while statips:直接用整個陣列進行排序,不要一段一段的取,這樣返回的時候會不能輸出你想要的值,因為陣列已經改變了。

複雜度為o(n+mlogm)

輸出前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大的數,每...

輸出前m大的數(快排)

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