快速排序演算法 遞迴模板和非遞迴模板

2021-10-16 17:28:04 字數 748 閱讀 7493

就是一種對於氣泡排序的改進,基本思想是選取乙個記錄作為標記,經過一次排序,將整個序列分成兩部分,其中一部分值小於標記值,另外一部分大於標記值。然後再對於兩部分分別進行排序,從而使整個序列有序。
遞迴實現思想:

確定分界點 (陣列排序q[ ]),用來進行比較的分界點,一般來說可以是最左邊的left q[ l ]=x,或者是最右邊的right q[ r ] =x,還可以用中間值q[ (l+r)/2 ]=x;

進行分段處理,左半部分全部是小於x的數,右半部分全部是大於x的數,x的值可以是任意取值的。

遞迴處理左邊和右邊部分,(一定要有遞迴出口)

if

(l>=r)

return

;//表示左邊的邊界指標已經到了右邊邊界指標的右邊,此時停止

void

quick_sort

(int q,

int l,

int r)

非遞迴排序思想:

void

quick_sort

(int q,

int l,

int r)}

q[l]

=q[i]

; q[i]

=x;//左半部分

if(i-

1>l)

//右半部分

if(i+

1}}

快速排序非遞迴演算法

本人根據書上的三數中值快速排序修改 struct leftright inline void swap int a,int b void qsort int a,int left,int right for int m 1 0 k ma center swap a left a center if ...

快速排序 非遞迴演算法

include stdafx.h include using namespace std int myarray void printarray int array,int len printf r n int partition int s,int l,int r 從左向右找大於或等於x的數來填s...

非遞迴快速排序演算法

昨天做人人網筆試題,其中乙個就是快排非遞迴演算法,當時考慮的不全面,下面發下正確答案。先說遞迴演算法 include include using namespace std int partion int arr,int p,int r int temp arr i arr i arr p arr ...