找前m個大的數

2021-10-02 04:08:57 字數 677 閱讀 7939

#include

using

namespace std;

/*查詢前m個大的數字

方法有很多 直接sort函式走一波 但是這樣的複雜度是比較高

題目要求是 一共是n個數 要輸出前m個數字 時間複雜度是o(n+mlogm)

*///分治思想 將前m個數字挪到一邊 就體現了分治

voidqs(

int a,

int l,

int r ,

int m)

//陣列下標是從0開始 所以統計數字要加1

int right_num = r - j +1;

//此時算到大於m的數更多 則需要進行重新計算

if(right_num > m)

qs(a,j+

1,r,m)

;//還有m-b個數沒有

if(right < m)

qs(a,l,i,m-right);}

intmain()

;qs(a,0,4

,3);

for(

int i =

4; i >=4-

3+1; i--

)printf

(" %d"

,a[i]);

return0;

}``

分治1 輸出前m個大的數

輸出n個數中前m個大的數可以採用先排序在取前m個大的數,這個最好的時間複雜度為o nlogn 可以利用快排的思想加快時間複雜度,下面演算法時間複雜度為o n mlogm 若mint a 100 void swap int a,int b void quicksort int a,int s,int ...

前m大的數

total submission s 13762 accepted submission s 4693 problem description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表...

前m大的數

a 前m大的數 sort time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,...