是一高等排序演算法,又稱為Partion Exchange Sort,具有最佳的平均執行時間,也是目前公認效率最高的排序演算法。
基本概念:與merge sort相類似,皆利用Divide and conquer algorithms來解決問題。就是把一複雜問題拆解成兩個
或更多的相同或相似的子問題,直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。
主要是從數列中挑出一元素pivot做基準,把數列分成大於pivot及小於pivot的兩個子問題,依序循環完成排序。
Time complexity:
Unstable。
ex: Input:3,5,5*,1
pivot:3 Output:3,1,5*,5
quick sort的時間複雜度關鍵在於選擇pivot。正所謂:好的pivot讓你上天堂,不好的pivot讓你算到爽。
主要原則為避免選到的pivot為最大或最小的元素,形成Worst case。
Qsort(list,m,n)
//排序list[m]~list[n],且設list[n+1]必定大於list[n]
{ if m<n then
{ i=m;
j=n+1;
pk=list[m]; //pk=pivot
repeat
{ repeat
{ i=i+1;
until list[i]>=pk
}
repeat
{ j=j-1;
until list[j]<=pk
}
if i<j then swap(list[i], list[j]);
until (i>=j)
}
swap(list[m],list[j]);
Qsort(list,m,j-1);
Qsort(list,j+1,n);
}
}