就是一種對於氣泡排序的改進,基本思想是選取乙個記錄作為標記,經過一次排序,將整個序列分成兩部分,其中一部分值小於標記值,另外一部分大於標記值。然後再對於兩部分分別進行排序,從而使整個序列有序。
遞迴實現思想:
確定分界點 (陣列排序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 ...