#include<stdio.h>
#include <iostream>
#include<stack>
using namespace std;
//---------------实现一趟排序-------------
int part(int a[],int first,int last)
{
int key=a[first];
while(first<last)
{
while(first<last&&a[last]>=key)
--last;
a[first] = a[last];
while(first < last && a[first] <= key)
++first;
a[last] = a[first];
}
a[first] = key;
return first;
}
//--------------递归调用--------------
void Qsort(int *a,int start,int end)
{
if(start<end)
{
int p=part(a,start,end);
Qsort(a,start,p-1);
Qsort(a,p+1,end);
}
}
//--------------非递归---------------
typedef struct{
int high;
int low;
}Bor; //建立结构体存储两个下标
void qq(int a[],int low,int high)
{
Bor b;
int p;
stack<Bor> s;
b.low=low; b.high=high;
s.push(b);
while(!s.empty())
{
Bor tep;
tep=s.top(); s.pop();
p=part(a,tep.low,tep.high);
if(p-1>tep.low)
{
Bor dd;
dd.low=tep.low;
dd.high=p-1;
s.push(dd);
}
if(p+1<tep.high)
{
Bor dd;
dd.low=p+1;
dd.high=tep.high;
s.push(dd);
}
}
}
int main()
{
int a[] = {5, 1, 6, 8, 7, 9, 4, 2, 3};
qq(a,0,sizeof(a)/sizeof(a[0]-1));
for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
{
printf("%d ",a[i]);
}
return 0;
}
/*
//------------------递归一个函数实现----------------
void Qsort(int a[], int low, int high)
{
if(low >= high)
{
return;
}
int first = low;
int last = high;
int key = a[first];
while(first < last)
{
while(first < last && a[last] >= key)
{
--last;
}
a[first] = a[last];
while(first < last && a[first] <= key)
{
++first;
}
a[last] = a[first];
}
a[first] = key;
Qsort(a, low, first-1);
Qsort(a, first+1, high);
}
*/
快速排序(递归+非递归)
最新推荐文章于 2022-07-28 17:50:36 发布