#include <iostream>
#include <cstdlib>
using namespace std;
void quickSort(int *data, int length, int start, int end);
int main()
{
int test[] = {4, 3, 6, 2, 9, 0};
try
{
quickSort(test, 6, 0, 5);
}
catch(char *ch)
{
cout << ch << endl;
return 1;
}
for (int i=0; i<6; i++)
cout << test[i] << " ";
cout << endl;
return 0;
}
void swap(int* a, int* b) //交换数据
{
int temp = *a;
*a = *b;
*b = temp;
}
int random(int start, int end) //随机数生成器
{
return start+(end-start)*rand()/(RAND_MAX+ 1);
}
int partition(int *arr, int length, int start, int end) //求得分界值
{
if (arr==NULL || length<=0 || start<0 || end>=length)
throw("Parameter error!");
int index = random(start, end);
if (index != end)
{
swap(&arr[index], &arr[end]);
}
int small = start-1;
for (int i=start; i<end; i++)
{
if (arr[i] < arr[end])
{
small++;
if (small != i)
{
swap(&arr[small], &arr[i]);
}
}
}
small++;
swap(&arr[small], &arr[end]);
return small;
}
void quickSort(int *data, int length, int start, int end) //递归快速排序
{
if (start == end)
return;
int index = partition(data, length, start, end);
if (index > start)
{
quickSort(data, length, start, index-1);
}
if (index < end)
{
quickSort(data, length, index+1, end);
}
}