非递归快速排序和非递归快速乘幂
2012-12-01 21:01
260 查看
#include <iostream> #include <cstdio> #include <stack> using namespace std; long long re_pows(int a,int n)//递归快速乘幂 { if(n==0) return 1; long long t=re_pows(a,n/2); long long ans=t*t; if(n&1) ans*=a; return ans; } long long ure_pows(int a,int n)//非递归快速乘幂 { int i=1; while(i<=n)i<<=1; long long ans=1; while(i>>=1) { ans*=ans; if(n&i) ans*=a; } return ans; } int arr[100]={1,2,4,5,3}; struct node { int l,r; node(){} node(int a,int b){l=a;r=b;} }; int part(int l,int r) { int i=l-1,j=l; while(j<r) { if(arr[j]<arr[r]) swap(arr[++i],arr[j++]); else j++; } swap(arr[++i],arr[r]); return i; } void re_qsort(int l,int r)//递归快速排序 { if(l>=r) return; int m=part(l,r); re_qsort(l,m-1); re_qsort(m+1,r); } stack<node> q; void ure_qsort(int l,int r)//非递归快速排序 { q.push(node(l,r)); while(!q.empty()) { l=q.top().l; r=q.top().r; q.pop(); while(l<r) { int m=part(l,r); q.push(node(m+1,r));//把右边的保存下来 r=m-1; } } } int main() { int i,n; while(cin>>n) { for(i=0;i<n;i++) { cin>>arr[i]; } ure_qsort(0,n-1); for(i=0;i<n;i++) { cout<<arr[i]<<' '; } cout<<endl; } return 0; }
相关文章推荐
- 快速排序递归与非递归
- 快速排序之递归与非递归
- 快速排序 递归和非递归
- 快速排序实现之递归与非递归
- 快速排序 递归与非递归
- 快速排序Java源码(递归和非递归)
- Java 实现快速排序 递归和非递归
- 快速排序的递归和非递归的实现
- 快速排序的递归和非递归分析
- 快速排序实现之递归与非递归
- 快速排序的递归和非递归分析
- 快速排序Java源码(递归和非递归)
- Java实现快速排序递归和非递归
- 快速排序递归及非递归实现
- Python--递归和快速排序 -- quickSort
- 快速排序递归与非递归算法
- 快速排序 数组+递归实现
- C/C++面试题(三) 推断二叉树、快速排序递归实现、递归判断数组递增
- 快速排序的非递归实现
- 笔记:快速排序的java实现,递归的实现