http://blog.youkuaiyun.com/morewindows/article/details/6684558
#include<iostream>
using namespace std;
/* 快速排序 挖坑填数+分而治之
* s 数组 存放数字系列
* l 左边初始基数下标
* r 右边初始基数下标
****************************************/
// 返回调整后的基准数位置 挖坑天填数
int AdjustQrray(int s[], int l, int r)
{
int i =l ; //初始化,左右两边的坐标
int j = r;
int x = s[l]; //s[l] 是s[i]的第一个坑,作为基数
while (i<j)
{
//从右向左找小于x的数来填s[i]
while (i <j && s[j] >= x)
j--;
if (i < j)
{
s[i++] = s[j]; // 将s[j] 填到s[i] 中,s[j]就成了一个新的坑
}
//从左向右找大于或者等于x的数来填s[j]
while (i <j && s[i] <x)
i++;
if (i <j)
{
s[j--] = s[i]; // 将s[i] 填到s[j]中,s[i]就形成一个新的坑
}
}
// i =j 时,退出循环,此时将x填数最后一个坑中,
//该数左边都是小于它的数,右边都是大于它的数
s[i] = x;
return i; //返回改基数的下标位置
}
// 分而治之
void quick_sort1(int s[], int l, int r)
{
if(l <r)
{
int i = AdjustQrray(s,l, r); //先挖坑填数,调整s[];
//for(i = 0; i < 9; i++)
//cout<< s[i] <<" ";
quick_sort1(s,l,i-1); //递归调用,排左边的
quick_sort1(s,i+1,r); //排右边的
}
return;
}
void quick_sort(int s[], int l, int r)
{
int i;
i = AdjustQrray(s, l, r); //挖坑填数 找基数
quick_sort1(s,l,i-1); //递归调用,排左边的
quick_sort1(s,i+1,r); //排右边的
return;
}
int main()
{
int i;
//int N =10; //数组个数
int s[10] = {72,6,57,88,60,42,83,73,48,85}; //初始化
for(i = 0; i < 9; i++)
cout<< s[i] <<" ";
cout<<endl;
//quick_sort(s, 0, 10-1); //快速排序
//AdjustQrray(s, 0, 10-1);
//quick_sort1(s, 0, 10-1);
quick_sort(s, 0, 10-1); //快速排序
//输出排序后的数组
for(i = 0; i < 9; i++)
cout<< s[i] <<" ";
return 0;
}