#include "stack"
#include "stdio.h"
#include "vector"
using namespace std;
void swap1(int& a,int& b)
{
int temp=a;
a=b;
b=temp;
}
//强大的异或,不需要用到暂时变量就可以实现二者互换
void swap2(int& a,int& b)
{
if (a!=b) {
a^=b;
b^=a;
a^=b;
}
}
int partition1(int a[],int l,int r)
{
int i=l;
int x=a[i];
for(int k=l+1;k<=r;k++)
{
if (a[k]<x)
{
i++;
if (i<k)
swap2(a[i],a[k]);
}
}
swap1(a[l],a[i]);
return i;
}
//这个是第一次转化成递归以后的算法,递归转化为非递归,总是离不开if,while
void Non_recursive_quicksort1(int a[], int low, int high)
{
stack<int> st;
if(low < high)
{
int pivot = partition1(a, low, high);
st.push(low);
st.push(pivot - 1);
st.push(pivot + 1);
st.push(high); //栈初始化
while(!st.empty())//当栈不空的时候,说明元素还没排好序,执行
{
high = st.top();
st.pop();
low = st.top();
st.po
快速排序非递归实现
最新推荐文章于 2024-09-13 18:58:52 发布
本文介绍了两种非递归实现快速排序的方法,通过使用栈来替代递归过程。第一种方法在划分区间后直接压栈,但可能将不必要的区间再次划分;第二种方法进行了改进,避免了这种问题,确保在数组元素只有一个时不再进行分区操作。最后,通过示例展示了非递归快速排序的完整流程。
摘要由CSDN通过智能技术生成