快速排序非递归版实现
来源:互联网 发布:电力系统知乎 编辑:程序博客网 时间:2024/05/17 06:09
今天研究了一下快速排序如何用非递归算法解决。下面代码,自认为非常简洁,通过简单测试没有发现任何问题,供大家参考。
本程序利用了“栈”
代码如下:
#include <iostream>#include <stack>#include <iterator>#include <algorithm>using namespace std;int partition(int data[],int lo,int hi) {int v=data[lo];while(lo<hi) { while(lo<hi && data[hi]>=v) hi--;data[lo]=data[hi];while(lo<hi && data[lo]<=v) lo++;data[hi]=data[lo];}data[lo]=v;return lo; }void QuickSort_1(int data[],int lo,int hi) {stack<int> st;int key;do {while(lo<hi) {key=partition(data,lo,hi); st.push(lo);st.push(key-1);lo=key+1; }if(st.empty()) return;hi=st.top();st.pop(); lo=st.top();st.pop(); } while(true);}void QuickSort_2(int data[],int lo,int hi) {stack<int> st;int key;while(lo<hi || !st.empty()) {if (lo<hi) {key=partition(data,lo,hi); st.push(lo);st.push(key-1);lo=key+1; } else {hi=st.top();st.pop(); lo=st.top();st.pop();}} }int main() {int arr[] = {1,1,1,1,1,1,4,2,3,1};int n = sizeof(arr) / sizeof(int);QuickSort_1(arr, 0, n-1);//QuickSort_2(arr, 0, n-1);copy(arr, arr+n, ostream_iterator<int>(cout, " "));cout<<endl;return 0;}
- 快速排序非递归版实现
- 快速排序非递归实现
- 快速排序非递归实现
- 快速排序非递归实现
- 非递归实现快速排序
- 快速排序非递归实现
- 快速排序非递归实现
- 快速排序递归及非递归实现
- 快速排序实现(递归+非递归)
- 快速排序递归与非递归实现
- 快速排序的非递归实现
- php的非递归快速排序实现
- 霍尔快速排序 非递归 C++实现
- 非递归的快速排序实现(转)
- 用栈来实现非递归快速排序。
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- web.xml配置详解
- ext4.1 tree drop 相关问题以及解决方法、
- Leap Motion自带Sample之详解_Win/C++版本
- 无线网络共享,win7/win8[网上整理加自身实践]
- ubuntu linux下查看系统占用的情况
- 快速排序非递归版实现
- 韩顺平老师算法连载10(转载)
- KMP算法解析
- 自动化生产厂商在硬编码验证安全公告发布近两年后开始修正这类BUG
- android下面res目录
- NLP news
- 遇到的问题 ----windows不能更改密码
- 周鸿祎:“一个优秀产品经理的必备素质”的经验与理念。
- WPF SnapsToDevicePixels用途