1. 写一个数组,第一个数作为基准X
2. 指针i,指向左边,j指向右边。
3. 从j开始,找到小于X的数,放在a[i],也就是,如果a[j]> X, j--; a[i++]=a[j];
4. 现在,i已经向右挪动了一个。从i开始,向右找到大于X的数,放在a[j],也就是, 如果a[i]<X, i++; a[j--]=a[i];
5. 重复2-4,一直到i==j,这时候,a[i]=a[j]的左边都小于X,右边都大于X。令a[i]=X;
6. 递归调用
#include <iostream> #include <stdio.h> using namespace std; void quickSort(int a[], int l, int r){ if (l < r) { int i = l, j = r; int x = a[l];//挖出来第一个坑 while (i < j){ while (i<j && a[j] >= x) j--; if (i<j) a[i++] = a[j]; while (i < j && a[i] < x) i++; if (i<j) a[j--] = a[i]; } a[i] = x; quickSort(a, l, i - 1); quickSort(a, i+1, r); } } int main(){ int data[] = { 5, 4, 2, 1, 3, 8,11,9,10 }; quickSort(data, 0, 8); for (int i = 0; i < 9;i++) cout << data[i] << endl; system("pause"); return 0; }
上图来自:http://blog.csdn.net/wuxinyicomeon/article/details/5996675