思想:和歸併排序一樣,快速排序也使用了分治的思想,首先拿到乙個基準值,把陣列中大於基準值的放在一邊,小於基準值的放在一邊,然後接著把左右兩邊重複上述操作,直到要排序的子陣列中只有乙個元素時,此時的陣列既是已經排好序的陣列。
和歸併排序區別:快排和歸併排序同時都是使用了分治的想法,並且時間複雜度都是θ(nlgn)。但是在歸併排序,左右兩邊的陣列是排好序的,然後合併,而快排省略了合併的過程,在左右分組的遞迴的同時進行了合併操作。
時間複雜度:θ(nlgn)
c++實現:
// test_1.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。
//#include
#include
using
namespace std;
//快速排序
void
pssort
(vector<
int>
& list,
int left,
int right)
if(i < j)
while
(i<=temp)
if(i < j)
} list[i]
= temp;
//此時的結果會把temp數值為分界線,大於的在右邊,小於的在左邊
//接下來對左右分別排序
//使用遞迴重複上述步驟,直到最後左右界限相等時,則整個陣列都排好了序
pssort
(list, left, i)
;pssort
(list, i+
1, right);}
intmain()
int length = intput_array.
size()
; cout <<
"排序結果為:"
<< endl;
#pragma region 快速排序
pssort
(intput_array,
0, length -1)
;for
(int i =
0; i < length; i++
)#pragma endregion
return0;
}
排序演算法 快速排序演算法
網際網路的大型公司還在火熱招聘中,參與了一次又一次的筆試,都不通過,我還是太菜!作為程式設計人員,需要邁過去 資料結構與演算法 這個坎,畢竟,筆試不會真的很虧,加油吧,少些水,多點實操。一 快速排序演算法思想 從一組資料中找出乙個基準值,一般是選擇中間值作為基準值,然後從左到右將值與基準值進行比較,...
演算法 排序演算法 快速排序
快速排序是對冒泡法排序的一種改進。快速排序演算法 的基本思想是 將所要進行排序的數分為左右兩個部分,其中一部分的所有資料都比另外一 部分的資料小,然後將所分得的兩部分資料進行同樣的劃分,重複執行以上的劃分操作,直 到所有要進行排序的資料變為有序為止。可能僅根據基本思想對快速排序的認識並不深,接下來以...
排序演算法 快速排序
快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 1.從數列中挑出乙個元素,稱為 基準 pivot 2.重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分...