最簡快排模板 第k大數

2021-10-24 15:40:28 字數 856 閱讀 5113

這個快排模板,還是記住吧。。。邊界太複雜了,搞不懂搞不懂

它的思路和普通快排不是很一樣:

普通快排的思想從任選乙個數,正常選中間,然後在陣列中找到這個數的位置,選定,繼續把這個數的左邊和右邊繼續遞迴搞完

這個快排就其實思路也差不多,它把小於等於x的搞在左邊,大於等於x的搞在右邊,然後繼續遞迴,就排完了,,,**簡單嘿嘿

#include using namespace std;

const int ma = 1e6+10;

int a[ma];

void q_sort(int a,int l, int r)

q_sort(a,l,j);//q_sort(a,l,i-1)

q_sort(a,j+1,r);//q_sort(a,i,r)

return ;

}int main()

你想想看你快排在幹嘛,不就是找某個數的位置嗎,哦吼是不是發現新大陸?找到某個數的位置,在判斷一下它是第幾個不就可以拉?看**

#include using namespace std;

const int ma = 1e6+10;

int a[ma];

int find_k(int l, int r, int k)

int cha = j-l+1;

if(cha < k) return find_k(j+1,r,k-cha) ;//小了在右邊

if(cha >= k) return find_k(l,j,k);//大了在左邊 因為你不知道j現在的位置是在等於還是大於的位置所以要繼續找

}int main()

第k大數字 快排,大根堆實現

有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。給定乙個整數陣列a,同時給定它的大小n和要找的k k在1到n之間 請返回第k大的數,保證答案存在。class finder intpartition vector int arr,int left,int right arr left a...

快速排序 快排求第K大

快速排序 快排採用分治的策略,先從數列中取出乙個元素作為作為基準元素,以基準元素為標準,將問題分解為兩個子串行,使小於基準的子串行在左側,使大於等於基準元素的子串行右側,對兩個子串行再進行快速排序,最終得到排好序的序列。時間複雜度 o nlogn 空間複雜度o logn 快速排序是不穩定的 code...

歸併 逆序數 快排 第k小數

目錄 歸併排序 完整 快速排序 思路 進行二分,然後合併。對於合併的兩個模組,每乙個模組必定已排好,因為是排完才合併。例如2 4 6 1 3 7 雙 指標 乙個指向左邊 乙個指向右邊。右邊1 左邊2 1進入b陣列 此時2 4 6 3 7 b 右邊3 左邊2 2進入b陣列 此時4 6 3 7 b 以此...