快速排序的代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
int SortByOnce(int a[], int begin, int end);
void QuickSort(int a[], int begin, int end);
bool CheckResultIsRight(int a[], int len);
int main()
{
int a[100];
int len = sizeof(a)/sizeof(int);
memset(a, 0, sizeof(a));
for(int i = 0; i < len; ++i)
a[i] = rand();
random_shuffle(a, a+len);
QuickSort(a, 0, len - 1);
if(false == CheckResultIsRight(a, len))
{
cout<< "排序结果是错误的!" << endl;
return 0;
}
else
{
cout<< "排序结果是正确的,输出如下:" << endl;
for(int i = 0; i < len; ++i)
cout<< a[i] << " ";
}
return 0;
}
int SortByOnce(int a[], int begin, int end)
{
int pos = begin + rand()%(end - begin + 1); //随机生成中间值
swap(a[begin], a[pos]);
int tmp = a[begin];
while(begin < end)
{
while(begin < end && a[end] >= tmp )
--end;
if(begin < end)
a[begin++] = a[end];
while(begin < end && a[begin] < tmp )
++begin;
if(begin < end)
a[end++] = a[begin];
}
a[begin] = tmp;
return begin;
}
void QuickSort(int a[], int begin, int end)
{
if(begin >= end)
return ;
int mid = SortByOnce(a, begin, end);
QuickSort(a, begin, mid - 1);
QuickSort(a, mid + 1, end);
}
//检查排序结果是否正确
bool CheckResultIsRight(int a[], int len)
{
int i = 0;
for( i = 0; i + 1 < len && a[i] < a[i+1]; ++i) ; //检查前一个元素一定比后一个元素要小
if(i + 1 < len)
return false;
else
return true;
}