谁能给我详细讲讲快速排序原理
网上关于快速排序的资料,要么就是原理讲得明白,但是例子根原理不贴边,并且运行出错.要么就是例子是对的,原理看不懂
比如:
void quickSort(int *a,size_t left,size_t right) { size_t p = (left + right)/2; int key = a[p]; for(size_t i = left,j = right; i < j;) { while(!(key < a[i] || p < i)) i++; if(i < p) { a[p] = a[i]; p = i; } while(j>0 && !(j < p || a[j] < key)) j--; if(p < j) { a[p] = a[j]; p = j; } } a[p] = key; if(p - left > 1) quickSort(a,left,p-1); if(right - p > 1) quickSort(a,p + 1, right); }
百度百科的这个c++优化版,运行没问题,但是我看不懂他的原理,所以无法改成可逆序的
有比如:
Function QuickSort(MyArray() As Long, L, R, Optional FangXiang As Boolean = True)
'对单独数组(下标是连续的)进行排序,首次调用时候,L是数组的最小下标,R是最大下标
'FangXiang=True 是正排序,为False 是逆排序
Dim i, j, X, Y
i = L
j = R
'找出数组的中点
X = MyArray((L + R) / 2)
While (i <= j)
If FangXiang Then '※正排序
'找出比中点大的数