排序 快速排序 歸併排序模板 模板

2021-10-25 22:22:28 字數 1603 閱讀 9439

正經人誰手寫這玩意?

785. 快速排序

本質:分治。是不穩定的排序演算法。

時間複雜度:o(n

logn

)o(nlogn)

o(nlog

n)空間複雜度:o(l

ogn)

o(logn)

o(logn

),基於遞迴,用到棧空間

模板注意點:

關於無限遞迴問題,大家動手模擬一遍樣例就能理解了。快排邊界問題很多,很煩…也有快排優化的版本,如單邊遞迴、三數取中等等,以及將快排修改為穩定排序的方法都很多。有興趣可自行研究。

ij可能相等,可能穿越。

模板**:

#include

#include

using

namespace std;

const

int n =

1e5+5;

int n;

int q[n]

;void

quick_sort

(int l,

int r)

quick_sort

(l, j)

;// j對應 q[l]

quick_sort

(j +

1, r);}

intmain()

787. 歸併排序

本質:分治。是穩定的排序演算法。

時間複雜度:o(n

logn

)o(nlogn)

o(nlog

n)空間複雜度:o(n

)o(n)

o(n)

,輔助陣列空間,完成二路歸併

模板注意點:

模板**:

#include

using

namespace std;

const

int n =

1e5+5;

int n;

int q[n]

, tmp[n]

;void

merge_sort

(int l,

int r)

while

(i <= mid) tmp[k++

]= q[i++];

while

(j <= r) tmp[k++

]= q[j++];

for(

int i = l, j =

0; i <= r;

++i,

++j) q[i]

= tmp[j];}

intmain()

模板 快速排序 歸併排序

不得不說,手寫的快排真的好菜。即使開了隨機數.快速排序 include include include include using namespace std inline intread const int maxn 100010 namespace inx void quicksort int ...

快速排序與歸併排序 模板

理解 取中間值為分界點x,使得左邊的數 x,右邊的數 x,然後再遞迴處理左右兩段 模板 void quick int a,int l,int r quick a,l,j quick a,j 1,r 分治思想 不停的細分,在合起來,用兩個指標i,j分別指向兩個有序陣列,不停的從中取出當前剩餘元素中最小...

歸併排序以及快速排序模板

void merge vector arr,int l,int mid,int r while p1 mid while p2 r for int i 0 i size i 歸併排序 一定要注意 號的優先順序大於 class solution void merge vector arr,int l,...