分治1 輸出前m個大的數

2021-08-18 21:18:31 字數 410 閱讀 1976

輸出n個數中前m個大的數可以採用先排序在取前m個大的數,這個最好的時間複雜度為o(nlogn)。可以利用快排的思想加快時間複雜度,下面演算法時間複雜度為o(n+mlogm),若mint a[100];

void swap(int &a, int &b)

void quicksort(int a, int s, int e, int m)

int b = (e - j) + 1; // 判斷右邊大的數有幾個

if (m > b) // 若小於m個,在左邊再取m-b個

quicksort(a, s, i, m - b);

if (m < b) // 若大於m個,在右邊再去m個

quicksort(a, j + 1, e, m);

}int main()

找前m個大的數

include using namespace std 查詢前m個大的數字 方法有很多 直接sort函式走一波 但是這樣的複雜度是比較高 題目要求是 一共是n個數 要輸出前m個數字 時間複雜度是o n mlogm 分治思想 將前m個數字挪到一邊 就體現了分治 voidqs int a,int l,i...

輸出前m的的數

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

分治法 前m大的數

給定乙個陣列包含n個元素,統計前m大的數並且把這m個數從大到小輸 出如果先排序再找前m大的,時間複雜度為o nlogn 用分治處理 複雜度 o n mlogm 思路 把前m大的都弄到陣列最右邊,然後對這最右邊m個元素排序,再輸出 關鍵 o n 時間內實現把前m大的都弄到陣列最右邊 如何將前k大的都弄...