AcWing 785 快速排序(C 演算法)

2021-10-07 19:23:30 字數 1243 閱讀 1988

1、題目(來自於acwing):

給定你乙個長度為n的整數數列。

請你使用快速排序對這個數列按照從小到大進行排序。

並將排好序的數列按順序輸出。

輸入格式

輸入共兩行,第一行包含整數 n。

第二行包含 n 個整數(所有整數均在1~109範圍內),表示整個數列。

輸出格式

輸出共一行,包含 n 個整數,表示排好序的數列。

資料範圍

1≤n≤100000

輸入樣例:

53 1 2 4 5

輸出樣例:

1 2 3 4 5

2、基本思想:

用分治的思想。選定乙個標桿數x,將小於x的數放在x左側,將大於x的數放在x右側。對於兩邊分好的數在分別運用同樣的方法排序(遞迴)。

3、步驟:

①確定分界點 q[a],q[(a+b)/2],q[b]

②調整為左右兩個區間

③遞迴(左右分別排序)

#include

void

quick_sort

(int q,

int l,

int r)

;using

namespace std;

const

int n =

1e6+10;

int n, q[n]

;int

main()

quick_sort

(q,0

, n-1)

;for

(int i=

0; i

)return0;

}void

quick_sort

(int q,

int l,

int r)

//l為最左端資料的下標,r為最右端資料的下標

//這個迴圈的功能就是將標桿數x左右兩端的數分好,小的在左側,大的在右側

quick_sort

(q, l, j)

;//遞迴排x左側的資料

quick_sort

(q, j +

1, r)

;//遞迴排x右側的資料

}//該**改編自(僅有部分寫法改動):

注意事項:

標桿數x最好選擇中間數,或者隨機值,取左右端點值會超時。

Acwing 785 快速排序

給定你乙個長度為n的整數數列。請你使用快速排序對這個數列按照從小到大進行排序。並將排好序的數列按順序輸出。輸入格式 輸入共兩行,第一行包含整數 n。第二行包含 n 個整數 所有整數均在1 109109範圍內 表示整個數列。輸出格式 輸出共一行,包含 n 個整數,表示排好序的數列。資料範圍 1 n 1...

快速排序 Acwing785 快速排序

快排最壞情況為 o n2 本題若遇到最壞情況會超時,故我們需要優化快排,每次取中間的數,而不是取邊界的數 最壞情況分析 序列已經有序 每次取左區間的數進行快排,每次呼叫函式遍歷r l次,呼叫函式次數為n次,時間複雜度o n2 每次取中間的數進行快排,每次呼叫函式遍歷r l次,呼叫函式次數為logn次...

快排 AcWing785 快速排序

給定你乙個長度為n的整數數列。請你使用快速排序對這個數列按照從小到大進行排序。並將排好序的數列按順序輸出。輸入格式 輸入共兩行,第一行包含整數n。第二行包含n個整數 所有整數均在1 109範圍內 表示整個數列。輸出格式 輸出共一行,包含n個整數,表示排好序的數列。資料範圍 1 n 100000輸入樣...