快速排序演算法C 實現

2021-07-04 19:07:30 字數 1069 閱讀 7951

//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的值...