算法储备之快速排序

来源:互联网 发布:淘宝店铺查询 编辑:程序博客网 时间:2024/06/06 02:17


快速排序的非递归(利用栈):

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);}}