//quick sort
//stl中也有現成的快速排序演算法,內部實現採用了以下技巧
//1)樞軸的選擇採取三數取中的方式
//2)後半段採取迴圈的方式實現
//3)快速排序與插入排序結合
#include#include#includeusing namespace std;
//這一版本是最簡單實現版本,對於快速排序的優化主要有以下幾個方面:
//1)樞軸的選擇,若樞軸選取不全適,比如,若每次遞迴時,兩個子區間中的乙個為空,則快速排序將退化為氣泡排序
//關於樞軸的選擇有多種:取最後乙個元素、取第乙個元素、三數取中、九數取中、隨機值等
//2)另一方面是對迭代過程的優化,減少交換次數,減少遞迴深度等;
templateint partion1(vector& vec,int start,int end)
templateint partion2(vector& vec,int start,int end)
return start;
}templateint partion3(vector& vec,int start,int end)
return start;
}//以上是三種對樞軸的優化方法,無非就是避免快速排序惡化
//以下是避免不必要的交換過程
templateint partion4(vector& vec,int start,int end)
vec[start]=key;
return start;
}templatevoid qsort1(vector& vec,int start,int end)
//遞迴過程需要出棧入棧,成本較高,而且可能棧溢位,如果可能的話最好以迴圈方式代替遞迴
templatevoid qsort2(vector& vec,int start,int end)
int main()
; vectorvec(a,a+10);
quicksort(vec);
for(int i=0;icout
}
快速排序演算法 c 實現
namespace backpackproblem backpack bp new backpack profit int start 0 int end profit.length 1 bp.quicksort profit,start,end bp.print class backpack 快速...
快速排序演算法C 實現
經常看到有人在網上發快速排序的演算法,通常情況下這些人是在準備找工作,或者看 演算法導論 這本書,而在他們發布的 通常是差不多的版本,估計也是網上 copy 一下,自己改改,跑過了就算了,但是通常這樣玩根本沒有太大作用,如果到一家公司,給你一台不能上網的筆記本,20分鐘,你是根本寫不出來快速排序的演...
C 實現快速排序演算法
快速排序採用的是分治法,其平均時間複雜度為o nlogn 一趟快速排序的演算法是 1 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給 key,即 key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j j 1即j 找到第乙個小於 key的值...