快速排序的非递归写法
来源:互联网 发布:淘宝怎么异地发货 编辑:程序博客网 时间:2024/06/03 11:18
#include<iostream>#include<stack>using namespace std;struct node{int left;int right;};void Swap(int *x, int *y){int tmp = *x;*x = *y;*y = tmp;}int Median(int *a, int left, int right){int center = (left + right) / 2;if (a[left] > a[center])Swap(&a[left], &a[center]);if (a[left] > a[right])Swap(&a[left], &a[right]);if (a[center] > a[right])Swap(&a[center], &a[right]);Swap(&a[center], &a[right - 1]);return a[right - 1];}void partition(int *a, int left, int right, stack<node>* LR){int pivot = Median(a, left, right);int l = left;int r = right - 1;while (l < r){while (a[++l] < pivot);while (a[--r] > pivot);if (l < r)Swap(&a[l], &a[r]);elsebreak;}Swap(&a[l], &a[right - 1]);if (l < right && r > left){node lr;lr.left = left;lr.right = l - 1;LR->push(lr);lr.left = l + 1;lr.right = right;LR->push(lr);}}void QuickSort(int *a, int left, int right, stack<node>* LR){if (left == right)return;node lr;lr.left = left;lr.right = right;LR->push(lr);while (!LR->empty()){lr = LR->top();int l = lr.left;int r = lr.right;LR->pop();partition(a, l, r, LR);}}int main(){int a[] = { 1, 7, 9, 3, 2, 5, 6, 9, 0, 4, 2, 7, 9, 10, 1 };stack<node> *LR = new stack<node>();QuickSort(a, 0, 14, LR);for (int i = 0; i < 15; i++)cout << a[i] << " ";}
0 0
- 快速排序的非递归写法
- 快速排序的递归写法
- 快速排序partition过程常见的两种写法+快速排序非递归实现
- 快速排序partition过程常见的两种写法+快速排序非递归实现
- 快速排序之递归与非递归写法
- 非递归的快速排序
- 合并排序的递归与非递归写法
- 快速排序----非递归
- 快速排序 非递归
- 非递归快速排序
- 快速排序 非递归
- 快速排序非递归
- 归并排序非递归写法
- 快速排序的非递归算法
- 非递归的快速排序算法
- 快速排序的非递归实现
- php的非递归快速排序实现
- 非递归的快速排序实现(转)
- Eclipse配置Struts2二
- linux系统ip地址的配置
- 服务端挂盘开启1394调试
- leetcode:Partition List 【Java】
- GreenDao深度探索(二)
- 快速排序的非递归写法
- Android安全教程(2)---Fiddler简易使用教程之使用
- Idiomatic Python, well format in python
- 用grunt搭建自动化的web前端开发环境
- Ubuntu下 AndroidStudio 无法识别设备(手机/平板)的问题 , 多设备可以
- 集成Cordova+crosswalk with Android
- iOS8统一的系统提示控件——UIAlertController
- CXF+Spring 发布SOAP服务
- Linux tail命令