演算法導論二 快速排序

2021-06-17 23:48:07 字數 401 閱讀 8076

快速排序採用的是分治策略,其方法是將乙個陣列a[p,r]劃分為兩個子陣列a[p,q-1],a[q+1,r],使其左子陣列元素中的元素均小於等於a[q],右子陣列元素均大於a[q],並遞迴劃分兩個子陣列。其**如下:

#include using namespace std;

templateint partition(t a,int p,int r)

{ //選擇a[r]作為主元,劃分的子陣列均與a[r]比較,左子陣列元素均小於等於a[r],右子陣列均大於a[r]

int x=a[r];

//i起始位置指向首元素的前乙個位置

int i=p-1;

for(int j=p;jvoid quick_sort(t a,int p,int r)

{ if(p

快速排序 演算法導論

對於包含n個數的輸入陣列來說,快速排序是一種最壞情況時間複雜度為o n 的排序演算法。雖然最壞情況時間的複雜度很差,但是快速排序通常是實際排序應用中最好的選擇,因為它的平均效能非常好 它的期望時間複雜度是o nlgn 而且o nlgn 中隱含的常數因子非常小,另外,它還能夠進行原址排序,甚至在虛存環...

演算法導論 快速排序

既然敢叫 快速排序 必然有其過人之處。事實上,它確實是最快的通用內部排序演算法。它由hoare於1962年提出,相對歸併排序來說不僅速度快,並且不需要輔助空間。對於包含n個數的輸入陣列來說,快速排序是一種最壞情況時間複雜度為o n 2 的排序演算法。雖然最壞情況時間複雜度差,但是快速排序通常是實際排...

《演算法導論》 快速排序

最近和朋友聊天,聊到企業面試時考了一道鍊錶的快排,這道題在leetcode上也刷到過,而且對於陣列的快排,真是從大學到研究生一直都要求必須掌握的重點知識,然而自己不斷的思考,卻發現所謂的快排,比我以前想象的要複雜的多,因為快排的思想非常幹練,但是形式,或者說具體實現千變萬化,為了達到萬變不離其宗,筆...