非递归版本的快速排序
来源:互联网 发布:网络暴力英语ppt 编辑:程序博客网 时间:2024/05/19 16:48
快速排序:每次选择一个枢轴,比枢轴大的元素放在数组的右半部分,比枢轴小的元素放在数组的左半部分。然后递归的进入数组的左右两半部分。如果要用非递归来实现,我们需要用栈来保存数组左右两半部分的边界。代码如下:
int partition(vector<int> &nums, int start, int last){int val = nums[last];while (start < last){while (start < last && nums[start] <= val)start++;if (start < last){nums[last] = nums[start];last--;}while (start < last && nums[last] >= val){last--;}if (start < last){nums[start] = nums[last];start++;}}nums[start] = val;return start;}void quick_sort(vector<int> &nums, int start, int last){if (start < last){//保存数组两半部分的边界stack<int> s;s.push(start);s.push(last);//判断栈是否为空while (!s.empty()){last = s.top();s.pop();start = s.top();s.pop();int pos = partition(nums, start, last);//当前数组的左半部分边界入栈if (pos - 1 > start){s.push(start);s.push(pos - 1);}//当前数组的右半部分边界入栈if (pos + 1 < last){s.push(pos + 1);s.push(last);}}}}
0 0
- 非递归版本的快速排序
- 快速排序的非递归版本
- 快速排序 归并排序的非递归版本 备忘
- 非递归的快速排序
- 快速排序----非递归
- 快速排序 非递归
- 非递归快速排序
- 快速排序 非递归
- 快速排序非递归
- 每日编程7之快速排序非递归版本
- 快速排序的非递归算法
- 非递归的快速排序算法
- 快速排序的非递归实现
- php的非递归快速排序实现
- 非递归的快速排序实现(转)
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- NSNotification线程管理以及自动注销开源方案
- 设计模式-模版方法(行为型)
- 互联网公司面试题库
- Linux文件锁概念
- 关于kindEditor获取编辑内容dom节点
- 非递归版本的快速排序
- Expect the Expected(dp+概率)
- JavaScript学习笔记二十六:AJAX
- 扬尘噪声智能监测云平台
- SLAM 之旅
- 韬睿Toradex colibri IMX6开发板的WinCE系统开发
- gdb带参数调试
- Unity5.x 编辑器中 获取所有标记的 AssetBundle 文件
- 数组详解,以及数组与指针,函数