#include<iostream> using namespace std; int b[]={2,5,3,6,1,7,9}; void qsort(int a[],int left,int right) { int i,j; if(left<right){ i=left; j=right+1; do{ do i++;while (a[i]<a[left]); do j--;while (a[j]>a[left]); if(i<j) swap(a[i],a[j]); }while(i<j); swap(a[left],a[j]); qsort(a,left,j-1); qsort(a,j+1,right); } } int main() { qsort(b,0,6); for(int i=0;i<6;i++) cout<<b[i]<<" "; return 0; }
快速排序的非递归算法:
#include <iostream> #include <stack> using namespace std; int partition(double* a, int left, int right) { int i,j; if(left<right){ i=left; j=right+1; do{ do i++;while (a[i]<a[left]); do j--;while (a[j]>a[left]); if(i<j) swap(a[i],a[j]); }while(i<j); swap(a[left],a[j]); return j; } } void quickSort(double* a, int left, int right) { stack<int> t; if(left<right) { int p = partition(a, left, right); if (p-1>left) { t.push(left); t.push(p-1); } if (p+1<right) { t.push(p+1); t.push(right); } while(!t.empty()) { int r = t.top(); t.pop(); int l = t.top(); t.pop(); p = partition(a, l, r); if (p-1>l) { t.push(l); t.push(p-1); } if (p+1<r) { t.push(p+1); t.push(r); } } } } int main() { double a[]={2,5,3,6,1,7,9}; quickSort(a,0,6); for(int i=0;i<7;i++) cout<<a[i]<<" "; return 0; }