快排兩種方法

來源:互聯網
上載者:User
方法一:先從右向左找比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);}}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.