#include<iostream>
#include<cstdio>
#include<cmath>
#define pi 3.14
typedef long long LL;
using namespace std;
int Partition(int a[],int l,int r){
int temp=a[l];
while(l<r){
while(l<r&&a[r]>temp) r--;
a[l]=a[r];
while(l<r&&a[l]<temp) l++;
a[r]=a[l];
}
a[l]=temp;
return l;
}
void quicksort(int a[],int l,int r){
if(l<r){
int pos= Partition(a,l,r);
quicksort(a,l,pos);
quicksort(a,pos+1,r);
}
}
int main(){
/*
* 快速排序
* */
int a[5]={2,1,5,3,4};
quicksort(a,0,4);
for (int i = 0; i < 5; ++i) {
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
以上是快速排序的递归实现,那么如何使用非递归实现呢?
递归转非递归首先想到的就是栈这个数据结构!!
很简单!
void quicksort2(int* a,int l,int r){
stack<int> s;
s.push(l);
s.push(r);
while(!s.empty()){
int r=s.top();
s.pop();
int l=s.top();
s.pop();
int p= Partition(a,l,r);
if((p-1)>l){
s.push(l);
s.push(p-1);
}
if((p+1)<r){
s.push(p+1);
s.push(r);
}
}
}
记得引用头文件
#include<stack>