快速排序C實現

2021-10-09 13:25:48 字數 897 閱讀 1725

這兩天覆習,好久沒用c/c++了,快排也不會寫了…(丟人),打算網上抄乙個居然沒找到入意的,看了一遍原理實現下留檔自己看。

演算法的基本思路是分治,每次盡可能把序列分成等長的兩段,我們知道這樣層數最少是logn,每層的一小段都做相同的一件事,就是找個基準值,把比他小的都放到左邊,大的都放到右邊,這樣每層比較的次數也就是o(n)的數量級,平均的複雜度就是o(nlogn)。

關於快排退化到o(n^2)的原因也就很清楚了,就是每次作為基準值的數字,如果恰好是最大或最小,那麼則每次不能把數列很好的分成等長的兩段,相當於每次分成了n-1和1,那麼顯然就要分o(n)的層數,每層的比較次數又不會改變。

**

#includeusing namespace std;

#define maxn 1000005

#define ll long long int

#define inf 0x3f3f3f3f

#define inc(i,l,r) for(int i=l;i<=r;i++)

#define dec(i,r,l) for(int i=r;i>=l;i--)

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

ll read()

while(isdigit(ch))x=x*10+ch-'0',ch=getchar();

return f*x;

}int n;

int a[maxn];

void quick_sort(int a, int left, int right)

swap(a[idx], a[l]);

quick_sort(a, left, l-1);

quick_sort(a, l+1, right);

}int main()

排序 快速排序,C 實現

本文 的github位址 基本思想 快速排序 是對 氣泡排序 的改進。基本原理 基於分治法,在待排線性表中取乙個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞迴對兩個子表做快速...

快速排序 c 實現

快速排序思想 基於分治策略,對氣泡排序的一種改進。對於要排序的乙個序列,從中選一值進行排序,將其放入到正確的位置position。然後以position為界,對左右兩部分再做排序。直到劃分的長度為1。步驟 設有一待排序的序列 1.分別設定low hight指向序列的最左端 最右端 從序列中選乙個進行...

快速排序(C 實現)

include using namespace std void swap int a,int b int sort int begin,int end if beginwhile beginif begin return begin void quicksort int begin,int end...