快排两种方法

来源:互联网 发布:天堂2单机版java下载 编辑:程序博客网 时间:2024/06/14 22:23
方法一:先从右向左找比base小的数,再从左向右找比base大的数,最后是比base小的数在左边,比base大的数在右边。
void qSort(int *A, int l, int r){if(l<r){int i=l;int j=r;int base=A[l];int tmp;while(i<j){while(i<j&&base<=A[j]){j--;}while(i<j&&base>=A[i]){i++;}if(i<j){tmp=A[j];A[j]=A[i];A[i]=tmp;   }}A[l]=A[i];A[i]=base;qSort(A,l,i-1);qSort(A,i+1,r);}}






方法二:从左向右遍历,分为 小于区--等于区--大于区,再依次递归小于区和大于区
void swap(int arr[],int i, int j){int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}void partition(int a[],int l, int r,int *lef,int *rgt){int less=l-1;int more=r;while(l<more){if(a[l]<a[r]){swap(a,++less,l++);}else if(a[l]>a[r]){swap(a,--more,l);}else{l++;}}swap(a,more,r);*lef=less+1;*rgt=more;}void quicksort(int a[],int l,int r ){if(l<r){int lef,rgt;partition(a,l,r,&lef,&rgt);quicksort(a,l,lef-1);quicksort(a,rgt+1,r);}}


原创粉丝点击