分治之快速排序

2021-10-01 23:14:54 字數 1897 閱讀 5228

複習了一下快速排序,又忘了,這次加深一下印象。

首先看一下快排的實現過程

利用分治的思想,把乙個數字一分為二,接著對子陣列進行同樣的操作,直到陣列小到我們可以輕易進行排序為止。貼一下偽**

quick_sort

(a,left,right)

if left

p=partition

(a,left,right)

quick_sort

(a,left,p-1)

quick_sort

(a,p+

1,right)

end if

可以看出這一步非常簡單,就是乙個不斷分割,不斷遞迴的過程,其中最關鍵的一步就是partition這個函式,這個函式是乙個非常關鍵的操作,我們看一下這個操作的偽**

partition

(a,left,right)

if left

i=left,j=right,x=a[low]

//i和j相當於兩個指標,乙個從左往右進行查詢,另乙個從右往左進行

while

(i>=x)

//與x進行比較,直到j小於x

j--end while

if(i

a[i]

=a[j]

//把比x小的數j賦值給i指向的位置,不要怕i處的位置丟失,因為i現在的值已經賦給了x

i++end if

while

(i<=x)

//同理

i++end while

if(i

a[j]

=a[i]

j--end if

end if

x=a[i]

return i

雖然我在**注釋裡已經說得很清楚了,但是為了加深印象,我貼幾張圖演示一下partition的排序過程。

partition最後一步的時候千萬別忘了把x再賦給i

最後,是完整的c++源**:

/*date: 2023年1月6日

author: chauncy*/

#include

using

namespace std;

intpartitions

(int a,

int low,

int high)

a[i]

= x;

//把最開始取出來的x放到i處

return i;

}void

quicksort

(int a,

int low,

int high)

}int

main()

quicksort

(b,0

,n-1);

for(

int i=

0;i)return0;

}

分治演算法之快速排序

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

分治之歸併,快速排序

所謂歸併排序,就是把一段需要排序的序列分成2部分,分別完成排序之後,然後進行合併,從而完成對整個序列的排序。眾所周知,歸併排序用了分治的思想,即把原任務分成和原任務相同,但規模更小的幾個子問題。分別解決,從而達到解決原問題的效果。ex 給定以下陣列a 10 要求按從大到小的順序排序,歸併的思路如下 ...

分治之歸併,快速排序

所謂歸併排序,就是把一段需要排序的序列分成2部分,分別完成排序之後,然後進行合併,從而完成對整個序列的排序。眾所周知,歸併排序用了分治的思想,即把原任務分成和原任務相同,但規模更小的幾個子問題。分別解決,從而達到解決原問題的效果。ex 給定以下陣列a 10 要求按從大到小的順序排序,歸併的思路如下 ...