根据算法导论中给出的思想用分治递归进行实现的快速排序
#include
#include
#include<stdlib.h>
#include<time.h>
#include
using namespace std;
#define random(x)(rand()%x)
int aa[10] = { 1,3,4,5,7,9,2,6,0,8 };
int quitsort(int begin1, int end1)//就地调正
{
if (begin1 < end1)
{
int h = aa[end1];
int i = begin1 - 1;
for (int j = begin1; j < end1; j++)
{
if (aa[j] < h)
{
swap(aa[++i], aa[j]);
}
}
swap(aa[++i], aa[end1]);
return i;
}
}
void quit(int begin1, int end1)//分治
{
if (begin1 < end1)
{
int q=quitsort(begin1, end1);
quit(begin1, q-1);
quit(q+ 1, end1);
}
}
void quitrandom(int begin1, int end1)//随机分治
{
if (begin1 < end1)
{
srand((int)time(0));
int q = random(10);
swap(aa[end1], aa[q]);
return quit(begin1, end1);
}
}
int main()
{
quitrandom(0, 9);
for (int i = 0; i < 10; i++)
{
cout << aa[i] << " ";
}
}