快速排序应用分治法的思想进行处理,具体是:
1. 选择基准数(可以随机选择,通常可选数组第一个和最后一个或中间数);
2. 分割待排序序列(数组),序列前后设置left和right指针,往中间移动,比较left和基准,基准和right,发现逆序,交换数据,直到指针重合;
3. 重复递归处理分割序列。
class __declspec(dllexport) QuickSort
{
public:
QuickSort(int* a, int len);
~QuickSort();
void Sort(int* a, int left, int right);
int Base(int* a, int* left, int* right);
};
QuickSort::QuickSort(int* a, int len)
{
Sort(a, 0, len - 1);
}
QuickSort::~QuickSort()
{}
void QuickSort::Sort(int* a, int left, int right)
{
if (left>=right) return;
int base = Base(a, &a[left], &a[right]);
Sort(a, left, base - 1);
Sort(a, base + 1, right);
}
int QuickSort::Base(int* a, int* pleft, int* pright)
{
int base = *pleft;
while (pleft < pright)
{
while (base >= *pright && pleft < pright)
{
pright--;
}
if (pleft < pright) *pleft++ = *pright;
while (*pleft >= base && pleft < pright)
{
pleft++;
}
if (pleft < pright) *pright-- = *pleft;
}
*pleft = base;
return pleft-&a[0];
}