快速排序的非递归(利用栈):
int Sort(int * pArr, int low, int high)
{
int left = low;
int right = high;
int key = pArr[low];
while (left < right)
{
while (left < right && pArr[right] >= key)
right--;
if (left < right)
pArr[left++] = pArr[right];
else break;
while (left < right && pArr[left] < key)
left++;
if (left < right)
pArr[right--] = pArr[left];
else break;
}
pArr[left] = key;
return left;
}
void QuickSort(int * pArr, int low, int high)
{
using std::stack;
int mid, left, right;
stack<int> rangeStack;
if (low < high)
mid = Sort(pArr, low, high);
if (low < mid - 1)
{
rangeStack.push(low);
rangeStack.push(mid - 1);
}
if (mid + 1 < high)
{
rangeStack.push(mid + 1);
rangeStack.push(high);
}
while (!rangeStack.empty())
{
right = rangeStack.top();
rangeStack.pop();
left = rangeStack.top();
rangeStack.pop();
mid = Sort(pArr, left, right);
if (left < mid - 1)
{
rangeStack.push(left);
rangeStack.push(mid - 1);
}
if (mid + 1 < high)
{
rangeStack.push(mid + 1);
rangeStack.push(right);
}
}
}
快速排序递归函数:
void QuickSort(int * pArr, int low, int high)
{
if (low < high)
{
int left = low;
int right = high;
int key = pArr[low];
while (left < right)
{
while (left < right && pArr[right] >= key)
right--;
if (left < right)
pArr[left++] = pArr[right];
else break;
while (left < right && pArr[left] < key)
left++;
if (left < right)
pArr[right--] = pArr[left];
else break;
}
pArr[left] = key;
QuickSort(pArr, low, left - 1);
QuickSort(pArr, left + 1, high);
}
}