快速排序

来源:互联网 发布:otsu算法 opencv 编辑:程序博客网 时间:2024/06/01 09:53

快速排序(Quick Sort)

算法思想:采用分治法,首先选取一个主元,再将整个数组一分为二,使其中一个子数组的所有元素均小于等于主元,另外一个子数组的所有元素均大于主元,然后对两个子数组分别采用上述过程进行操作,所以这是一个递归算法。

如果快排算法对主元的选取是固定的,例如每次都选取第一个元素或者最后一个元素,则时间性能上界是O(N2),当原始数组本身就是由小到大或者由大到小排列时,算法性能最差。

快速排序是非稳定排序算法。

int RandPartition( int A[], int p, int q ){int value = A[p];int i = p;int j = q;while(i < j) {while(i < j) {if(A[j] <= value) {A[i] = A[j];break;}j--;}while(i < j) {if(A[i] > value) {A[j] = A[i];break;}i++;}}A[i] = value;return i;}void RandQuickSort( int A[], int p, int q ){int r;if( p < q ){r = RandPartition( A, p, q );RandQuickSort( A, p, r - 1 );RandQuickSort( A, r + 1, q );}}

原创粉丝点击