學習筆記 快速排序

2021-10-18 08:24:51 字數 1529 閱讀 7467

基本步驟:

1、確定分界點x(a[l],a[r],a[l+r>>1])

2、劃分區間(小於x的在一邊,大於x的在另一邊)

3、遞迴處理左右兩端

const

int n =

1e5+5;

int n,a[n]

;void

quick_sort

(int a,

int l,

int r)

quick_sort

(a,l,j)

;quick_sort

(a,j+

1,r);}

intmain()

巧用快排:求陣列中第k小的數

因為快排過程中選取分界點x排序後,那麼陣列左邊的數都小於等於x,右邊的數都大於等於x,假設陣列左邊有m個數,前m小的數都在左邊

如果m>=k,那麼第k小的數在左邊,往左遞迴

否則,第k小的數在右邊,並且在是右邊第k-m小的數

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define ull unsigned long long

#define up_b upper_bound

#define low_b lower_bound

#define m_p make_pair

#define mem(a) memset(a,0,sizeof(a))

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)

#define inf 0x3f3f3f3f

#include

using

namespace std;

inline ll read()

while

('0'

<=ch&&ch<=

'9') x=x*

10+ch-

'0', ch=

getchar()

;return f*x;

}const

int n =

1e5+5;

int n,k,a[n]

;int

quick_sort

(int l,

int r,

int k)

int nums=j-l+1;

//左邊的個數

if(nums>=k)

quick_sort

(l,j,k)

;else

quick_sort

(j+1

,r,k-nums);}

intmain()

快速排序學習筆記

學習資料出處 白話經典演算法系列之六 快速排序 快速搞定 快速排序採用分治策略,其基本思想 1 從數列中選乙個元素x作為基準數 2 分割槽過程,把不小於x的元素放到x的右邊,小於x的元素放到x的左邊 3 再對左右區間重複進行分割槽操作,直到各區間只有乙個數 morewindows總結的 挖坑填數 分...

學習筆記 快速排序

將乙個一維陣列從小到大排列。快速排序利用了遞迴的思想。需要三個引數,陣列本身,陣列起始索引也就是0,陣列最右索引,也就是陣列長度 1。簡單來說,快速排序的思想是這樣的,先選擇乙個數作為基準數,把比它小的都移動到左邊,把比它大的都移動到右邊,然後針對左邊這個子陣列,再選擇乙個基準數,比它小的移到左邊,...

快速排序學習筆記

一些廢話 今天在刷題的時候遇到了一道要求比較複雜的排序的題,用sort不能實現,需要手打快排。做完後來我的部落格翻了一下竟然沒寫過快排的隨筆,現在把它填上。大家都知道,在c 中,有乙個非常好用的函式sort 使用它只需要包括的標頭檔案即可。但是在某些情況下,僅僅使用sort 函式並不能充分滿足我們的...