注意红色部分为易错部分,蓝色部分的++不写也照样对,只不过每轮多比较一次已比过的数。还有q哨兵数一般选哪个都行,指的是一个数组里的数而不是数组下标,这里的返回值i=j,返回的是p哨兵位置(pivote)。当然你也可以让p=下标,不过这样每次交换后也要改变p.而在上式,p每次都是固定的。
#include<iostream> using namespace std; class quicksort{ public: int quicks(int *a,int low,int high) { int q=a[low];//q int i=low; int j=high; while(i<j) { while(q<=a[j]&&i<j) { j--; } if(i<j) { swap(a[i++],a[j]); } while(a[i]<=q&&i<j) { i++; } if(i<j) { swap(a[i],a[j--]);} } return j; } void quicksorts(int *a,int low,int high) { if(low<high) { int pivote=quicks(a,low,high); quicksorts(a,low,pivote-1); quicksorts(a,pivote+1,high); } } }; int main() { int arr[]={2,14,32,182,34,605,99,9,7,54,22,6,7}; quicksort qs; int len=sizeof(arr)/sizeof(int); qs.quicksorts(arr,0,len-1); for(int a=0;a<len;a++) { cout<<arr[a]<<"_ "; } return 0; }