首先簡單描述一下快速排序
1. 快速排序樹不穩定的(由於關鍵字的比較與交換是跳躍進行的)
2. 時間複雜度為o(n*logn) (最好情況為n*logn 若陣列基本有序為n*n)
3. 空間複雜度為logn
(主要是遞迴造成的棧空間的使用,最好情況,遞迴樹的深度為log2n,其空間複雜度也就為o(logn),最壞情況,需要進行n‐1遞迴呼叫,其空間複雜度為o(n),平均情況,空間複雜度也為o(logn))
根據上圖的演算法演示樹的深度為4
每一層的比較次數為8,7,5,1
因為快排的時間複雜與待排陣列的本身有聯絡的
所以平均時間複雜度為 logn(層數)*n(每層比較n次)
下面來看最壞的情況的時間複雜度
時間複雜度為 4+3+2+1
即 n(1+n)/2=o(n*n)
#include
using
namespace
std;
//int partsort(int* src,int low,int height)
//快速排序
int quicksort(int* src,int low,int high)
}int main();
quicksort(src,0,6);
for(int i=0;i<=6;i++){
cout
部分參考《大話資料結構》
如有錯誤歡迎提出
快速排序分析
1.開篇 終於還是忍不住要學習一下演算法啦,該面對的還是要面對,不能逃避,不能把已經會的技能忘掉,那是一種對生命的摧殘和不仁。不要怕,只要每天都在進步,水滴石穿,終有破雲見天日的時刻。感慨寫完了,回到正題,分析快速排序。2.原理 假設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣...
快速排序分析
一直想研究一下快速排序,今天剛好有空,寫一下自己對快速排序的認識。快速排序由於排序效率在同為o n logn 的幾種排序方法中效率較高,因此經常被採用。該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右...
快速排序分析
前言 剛剛學習到快速排序,快速排序是個基礎問題,去網上查了下,發現竟然沒有乙個讓人滿意的答案。就連為什麼快速排序比氣泡排序快這個基本的概念,也沒人說清楚。一般而言,網上對於為什麼快速排序比冒泡快,有兩種方向 1.算時間複雜度 2.二分法的優越性 對於這兩種解釋,明顯沒有從根本上觸及原理。對於1.算時...