演算法分析 分治思想之快速排序

2021-08-08 18:32:42 字數 1111 閱讀 8219

優化乙個演算法的最根本的原理就是減少演算法的基本操作。

分治法的設計思想是,將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。

於是,在快速排序中,我們通過分割陣列的思路來將大問題分割成小規模的問題,與二分搜尋法類似的是,在二分法

中,我們需要進行的操作是搜尋,是在已經排好序的基礎上通過一分為二來減少搜尋範圍,降低時間複雜度,二分搜

索中通過尋找中位數,將陣列分為左右兩邊,通過與中位數的比較確定待查詢數所在的範圍,即,我們在判斷是否中

位數與待查詢數的大小的同時,還利用判斷的結果,將搜尋的範圍縮小,這就與最基本的遍曆法中僅僅比較是否相等

有了很大的差距,換句話講,就是在二分搜尋中,我們通過一次比較進行了兩種操作,而在傳統的遍歷中,我們通過

一次比較僅僅只進行一種操作。於是,在排序中,我們是否也可以考慮這種思路。傳統的氣泡排序中,我們僅僅在一

個數與其他數的比較時確定了乙個數的位置(這裡寫的有點難理解的感覺),我們在進行比較的同時是否能仿照二分

搜尋法一般,比較的同時縮小排序的範圍,即我們通過選取乙個基準元素將帶排序陣列劃分為兩個陣列,在基準元素

與陣列元素進行比較的同時,將大於基準元素的數放到陣列的右側,小於基準的數放到陣列左側,在通過同樣的思路

對被劃分而成兩個個子問題進行相同的操作,直到最終子問題的大小等於3。

1.分解:以a[p]為基準元素將a[p:r]劃分為三段a[p:q-1],a[q+1:r]使得a[p:q-1]中任何元素小於等於a[q],a[q+1]中任何元素

大於等於a[q]下標q在劃分過程中確定

2.遞迴求解:通過遞迴呼叫快速排序演算法,分別對a[p:q-1]和a[q+1]進行排序

3:合併:由於對a[p:q-1]和a[q+1:r]的排序是就地進行的所以a[p:q-1]和a[q+1:r]都已排好的序後不需要執行任何計算,

就已排好序.

void algorithm::qsort(int a,int left,int right)

if(first>=last)

else

}a[left]=a[last];

a[last]=number;

return last;

}

分治思想之排序演算法

分而治之是設計高效演算法的乙個重要思想。本文主要總結一下分治思想在排序演算法中的運用。排序在商業資料處理和現代科學計算中有著重要的地位,它能夠應用於事物處理 組合優化 天體物理學 分子動力學 語言學 基因組學 天氣預報和很多其它領域。演算法 發展至今,已經出現過很多的排序演算法。如選擇排序,插入排序...

演算法分析 分治思想之合併排序

根據分治策略,我們建立了合併排序演算法,合併排序演算法的基本思想是 將待排序元素分成大小大致相同的兩個子集合分別對兩 個子集合進行排序,最終將排好序的子集合合併成為所要求的排好序的集合。換句話說,將乙個陣列兩個兩個結合並排序,形成小範圍有序的新的陣列,再將新的陣列四個四個結合,在此形成新的陣列以此 ...

分治演算法之快速排序

快速排序演算法也是基於分治思想的一種排序演算法,它的基本操作即為比較 交換。快速排序演算法的基本思想是從待排序的序列中選取乙個比較標準k 通常選取第乙個元素 然後將其餘元素依次跟k進行比較。在比較的過程中將大於k的元素移到k的後面,將小於k的元素移到k的前面,最後的結果是將原始序列分為兩個子串行,而...