# define STACKSIZE 50
void quicksort(int x[], int n)
{
int i,j;
struct stack_info{
int l;
int u;
}bounds;
struct stack_tag{
int stacktop;
struct stack_info limits[STACKSIZE];
}STACK;
STACK.stacktop=-1;
bounds.l=0;
bounds.u=n - 1;
push(&STACK,&bounds);
while(!empty(&STACK))
{
pop(&STACK,&bounds);
while(bounds.u > bounds.l)
{
partition(x,bounds.l,bounds.u,&j);
if((j - bounds.l) > (bounds.u - j))
{
i=bounds.u;
bounds.u=j - 1;
push(&STACK,&bounds);
bounds.l=j + 1;
bounds.u=i;
}
else
{
i=bounds.l;
bounds.l=j + 1;
push(&STACK,&bounds);
bounds.l=i;
bounds.u=j - 1;
} /* end if */
} /* end while */
}/* end while */
return;
} /* end quicksort */
int emtpy (struct stack_tag * stackptr)
{
if( stackptr->stack.top == -1)
return (1);
else
return (0);
} /* end empty*
void pop (struct stack_tag * stackptr, struct stack_info * data)
{
if empty (stackptr)
{
printf (“%s\n”, “stack underflow”);
}
data=&(stackptr-> limits [stackptr->stacktop]);
-- (stackptr->stacktop);
return;
}
void push (struct stack_tag * stackptr, struct stack_info *data)
{
int p;
p=++(stackptr->stacktop);
stackptr->limits[p].l = data->l;
stackptr->limits [p].u = data->u;
return;
} /*end push.; note no checking for stack overflow */
No comments:
Post a Comment