快速排序是一種劃分交換排序。它採用了一種分治的策略。
1.分治法的基本思想
分治法的基本思想是將原問題分解為若干個規模更小但結構和原問題相似的子問題。遞迴的解決這些子問題,然後將這些子問題的解組合為原問題的解。
2.快速排序的基本思想
設待排序的無序區為r[low..high],利用分治法可將快速排序的基本思想描述為:
1)在r[low..high]中選取乙個記錄作為基準(pivot),此基準可劃分為左右兩個較小的子區間r[low..pivotpos-1]和r[pivotpos-1..high],並使左子區間小於等於基準,右子區間大於等於基準
2)通過遞迴呼叫快速排序對左右子區間r[low..pivotpos-1]和r[pivotpos-1..high]的快速排序。
3)組合
3.快速排序演算法quicksort是一種不穩定排序
,平均時間複雜度o(n*log(n)),最壞時間複雜度o(n^2)。
**如下:
#include
#include
using namespace std;
typedef int rcetype;
int partition(rcetype *r,int i,int j) //對r[low..high]做劃分並返回基準記錄的位置
if(ivoid quicksort(rcetype *r,int low,int high) //對r[low..high]快速排序
;cout for(i=0;i<8;i++) quicksort(list,low,high); cout cout } 快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n個元素要 o nlogn 次比較。在最壞狀況下則需要 o n 2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 o nlogn 演算法更快,因為它的內部迴圈可以在大部分的架構上很有效率地被實現出來。快速排序使用分治策略... 快速排序的在內排中起到比較重要的作用,平均時間複雜度達到o nlogn 公升序快速排序 1 int partition vector vi,int start,int end 11 vi start key 12return start 13 14void quickcore vector vi,i... 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它用來做啥的了 為了方...C語言排序之快速排序篇
排序之快速排序
排序之快速排序