未测试边界条件
#include <iostream>
using namespace std;
#define METOHD_1 0
#define METOHD_2 0
#define METOHD_3 1
void swap(int &a, int &b){
int tmp = a;
a = b;
b = tmp;
}
int partition(int a[], int left, int right){
#if METOHD_1
//取第一个元素作为枢纽元
int tmp = a[left];
int i = left;
int j = right;
while(i < j){
while(i < j && a[j] > tmp)
--j;
if (i < j){
a[i] = a[j];
++i;
}
while(i < j && a[i] < tmp)
++i;
if (i < j){
a[j] = a[i];
--j;
}
}
a[i] = tmp;
return i;
#endif
#if METOHD_2
//取最后一个元素作为枢纽元
int mid = left - 1;
for (int i = left; i < right; ++i){
if (a[i] < a[right]){
++mid;
if (mid != i)
swap(a[mid], a[i]);
}
}
++mid;
swap(a[mid], a[right]);
return mid;
#endif
#if METOHD_3
//取第一个元素作为枢纽元(最简便的方式)
int mid = left;
for (int i = left + 1; i <= right; ++i){
if (a[i] < a[left]){
++mid;
if (mid != i)
swap(a[mid], a[i]);
}
}
swap(a[mid], a[left]);
return mid;
#endif
}
void qsort(int a[], int left, int right){
if (left >= right)
return;
int mid = partition(a, left, right);
qsort(a, left, mid - 1);
qsort(a, mid + 1, right);
}
int main(){
int a[10] = {5, 9, 3, 4, 6, 1, 2, 0, 7, 8};
qsort(a, 0, 9);
for (int i = 0; i < 10; ++i)
cout << a[i] << endl;
//int a = 1; int b = 2;
//swap(a, b);
int ttt = 0;
return 0;
}
参考 http://www.cnblogs.com/TenosDoIt/p/3665038.html