快速分类递归算法改写成迭代算法
/*将data[low, high]进行快速分类的迭代算法(WIN-TC1.9.1k中文DOS环境调试通过)*/
#include "stdio.h"
#include "conio.h"
#define n 8
void output(int *data)
{ int i;
printf("数组中的元素为:/n");
for(i=0;i<n;i++)
printf("%d/n",data[i]);
}
int Partition(int *data, int low, int high)
{ int i,j,t,r,k;
r=data[low]; j=low+1; k=high;
while(1)
{ while((j<=k)&&(data[j]<=r)) j++;
while((j<=k)&&(data[k]>=r)) k--;
if(j<k){ t=data[j]; data[j]=data[k]; data[k]=t; j++; k--; }
else break;
}
data[low]=data[k]; data[k]=r ;
return k;
}
int QSort(int *data, int low, int high)
{ int stack[2*n][2];
int i,top=0,t1,t2;
top++;
stack[top][0]=low;
stack[top][1]=high;
while(top!=0)
{
t1=stack[top][0];
t2=stack[top][1];
top--;
i=Partition(data,t1,t2);
if(t1<i-1)
{
top++;
stack[top][0]=t1;
stack[top][1]=t2;
}
if(i+1<t2)
{
top++;
stack[top][0]=i+1;
stack[top][1]=t2;
}
}
}
main()
{
int i,t,data[n];
for(i=0;i<n;i++)
{
printf("/n输入第 %d 个元素:",i+1);
scanf("%d",&data[i]);
}
output(data);
QSort(data,0,n-1);
output(data);
getch();
}