/*
利用快排的特點(假設預設公升序排序),每一次快排操作都能確定乙個數在排序結果中的最終固定位置,即該位置 pos 上的數為 n - pos 大的數,且之後的數即為前 n - pos 大的數,故此方法即可求第k大的數 也可求前k大的數。
設取第k大的數,即index = k;
若 pos < index; 就繼續快排右側的資料;
若 pos > index; 就繼續快排左側的資料;
若 pos == index; 即要求的結果。
*/#includeusing namespace std;
const int maxn = 1e8+9;
int a[maxn];
int qsort(int l,int r)
a[l] = temp;
return l;
}int main()
int pos = qsort(l,r);
while(pos!=index)
cout << a[index] << endl;
return 0;
}
STL 排序類 解決第k大問題
前言 相信我們會遇到過在一堆無序的數字中,問你第k大的數字是哪乙個或者第k小的數字。當然,最簡單的做法就是排序,然後直接輸出第k大的數字,這樣的話時間複雜度約為n 3 2 給定乙個長度為n的整數數列,以及乙個整數k,請用快速選擇演算法求出數列的第k小的數是多少。輸入格式 第一行包含兩個整數 n 和 ...
快速排序實現與如何求解第K大問題
快速排序,這種排序方式時間複雜度平均情況下為o nlogn 而且適合資料非常多的排序方法。它採用一種分治思想 在執行的過程種就把第k大問題解決了。很簡單但是非常巧妙,不用額外申請記憶體空間。如下可以自己跑一下 package com.jxd.test public class quicksort n...
整體二分 區間第 K 小(大)問題 詳解
整體二分是乙個求解區間第k小 大 非常優秀的演算法,但是要求離線處理,對於所有詢問做整體的二分答案操作。相較於主席樹 樹套樹,整體二分 應該 更加優秀。我用主席樹與整體二分寫,並沒有發現在時間上整體二分快多少,我自己算時間複雜度也覺得兩者差不多 也可能我寫的太醜了 但是空間上整體二分當然非常佔優 上...