您的位置:首页 > 其它

非递归快速排序和非递归快速乘幂

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: