快速排序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
原创粉丝点击