快速排序C++实现(递归,非递归)
来源:互联网 发布:快速排序算法的例子 编辑:程序博客网 时间:2024/06/06 12:49
#include <iostream>#include <vector>#include <stack>using namespace std;int quickSortRecusive(vector<int>& data,int i,int j){int l = i;int r = j;int x = data[r];//基准if(l >= r)return l;while(l < r){while(l < r && data[l] < x){l++;}if(l < r){data[r] = data[l];r--;}while(l < r && data[r] > x){r--;}if(l < r){data[l] = data[r];l++;}}data[l] = x;quickSortRecusive(data,i,l-1);quickSortRecusive(data,l+1,j);}int partition(vector<int>& data,int l,int r){int x = data[r];//基准if(l >= r)return l;while(l < r){while(l < r && data[l] < x){l++;}if(l < r){data[r] = data[l];r--;}while(l < r && data[r] > x){r--;}if(l < r){data[l] = data[r];l++;}}data[l] = x;return l;}void print(vector<int>& data){for(auto &c : data)cout << c << " ";cout << endl;}//非递归实现int quickSortNorecusive(vector<int>& data,int l,int r){stack<int> st;if(l < r){int tmp = partition(data,l,r);if(tmp-1 > l)//左边不止一个元素{st.push(tmp-1);st.push(l);}if(tmp+1 < r){st.push(r);st.push(tmp+1);}while(!st.empty()){int start = st.top();st.pop();int end = st.top();st.pop();int tmp = partition(data,start,end);if(tmp-1 > start)//左边不止一个元素{st.push(tmp-1);st.push(start);}if(tmp+1 < end){st.push(end);st.push(tmp+1);}}}}int main(void){vector<int> data={1,7,5,333,1,35,1245,2,68,32};//quickSortRecusive(data,0,data.size()-1);quickSortNorecusive(data,0,data.size()-1);print(data);}
0 0
- 快速排序实现(递归+非递归)
- 快速排序递归及非递归实现
- 快速排序递归与非递归实现
- 快速排序非递归实现
- 快速排序非递归实现
- 快速排序非递归实现
- 非递归实现快速排序
- 快速排序非递归实现
- 快速排序非递归实现
- 快速排序算法的递归与非递归实现(C/C++)
- 快速排序C++实现(递归,非递归)
- 快速排序(递归和非递归)
- 快速排序(递归和非递归)
- 快速排序(递归+非递归)
- 快速排序(非递归)
- 快速排序。冒泡排序递归和非递归的实现
- 快速排序----非递归
- 快速排序 非递归
- C# XDocument的使用
- (11)HTML5-鼠标单击事件监听
- 简单介绍树回归的算法原理
- 函数式编程
- 记录
- 快速排序C++实现(递归,非递归)
- React Native环境搭建
- Spring中定时任务Quartz集群配置学习
- mongodb 增删改查简单封装
- Linux团队开发权限管理纪实
- gradle使用mybatis时报Invalid bound statement (not found)
- javascript把number转化成百分比
- bootstrap tooltip在javascript中的使用技巧
- digit_recongnition