算法储备之快速排序
来源:互联网 发布:淘宝店铺查询 编辑:程序博客网 时间: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);}}
阅读全文
0 0
- 算法储备之快速排序
- 算法储备之堆排序
- 算法储备之希尔排序
- 算法储备之归并排序(分治法)
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- [算法]之快速排序
- 算法之--快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- mysqldb在python3下无法使用的解决方案
- llinux之管理网络练习
- python简单文本文件读取
- MySQL丢数据及主从数据不一致的场景
- netty源码分析之-服务端启动核心源码分析(5)
- 算法储备之快速排序
- 遇见Laravel Migrations的migrate与rollback
- Android设计模式之装饰模式
- 2017.10.17
- Gradle基础知识——Groovy的闭包
- python3中将`&#x`(《新)的字符串转化为utf-8
- CSRF学习笔记之CSRF的防御
- 提高django性能
- file类、输入输出流和缓冲流