quicksort - wykonanie krok po kroku

0

Potrzebuje zrobić tak, żeby ten algorytm wykonywał się tylko raz. Cały program wygląda tak, ze tablica musi być sortowana krokami, a po naciśnięciu guzika ma się wykonać kolejna zamiana zmiennych itd. Jest to program w CGI. Chodzi o to, żeby ta funkcja wyrzucała tablice, która miała posortować, ale po jednej zamianie i żeby jak się do niej wyśle tablice po tej zamianie wykonała następną zamianę zmiennych. Cala reszta programu jest napisana i działająca, brakuje tylko tej jednej rzeczy, z którą nie potrafię sobie poradzić.

Bardzo proszę o pomoc.

int quickSort( int a[], int l, int p)
{
	int v=a[(l+p)/2];
	int i,j,temp;
	i=l;
	j=p;
	do
	{
		while (a[i]<v) i++;
		while (v<a[j]) j--;
		if (i<=j)
		{
			temp=a[i];
			a[i]=a[j];
			a[j]=temp;
			i++;
			j--;
		}
	}
	while (i<=j);
	if (l<j) quickSort(a,l,j);
	if (i<p) quickSort(a,i,p);
}
0

Trzeba zamienić rekurencje na iteracje+stos

#include <malloc.h>

typedef struct { short l, p; } BRZEGI;

typedef struct
{
   int *tablica;
   BRZEGI *stos;
   BRZEGI *gora;
} QS;

QS* QS_Inicjuj(int *tablica, int rozmiar)
{
   QS* qs = (QS*)malloc(sizeof(QS));
   qs->tablica = tablica; 
   qs->gora = qs->stos = (BRZEGI*)calloc(sizeof(BRZEGI), rozmiar);
   qs->gora->l = 0;
   qs->gora->p = rozmiar - 1;
   return qs;
}

int QS_Iteracja(QS *qs)
{
   int i,j,temp,v,*a,l,p;

   if(qs->gora < qs->stos)
   {
      free(qs->stos);
      free(qs);
      return 0;
   }

   a = qs->tablica;
   i = l = qs->gora->l;
   j = p = qs->gora->p;
   qs->gora--;

   v=a[(l+p)/2];
   do
   {
      while (a[i]<v) i++;
      while (v<a[j]) j--;
      if (i<=j)
      {
         temp=a[i];
         a[i]=a[j];
         a[j]=temp;
         i++;
         j--;
      }
   }
   while (i<=j);

   if (i<p) 
   {
      qs->gora++;
      qs->gora->l = i;
      qs->gora->p = p;
   }
   if (l<j)
   {
      qs->gora++;
      qs->gora->l = l;
      qs->gora->p = j;
   }

   return 1;
}

int main()
{
   int i, tab[] = { 4, 0, 6, 3, 7, 1, 9, 8, 2, 5 };
   QS *qs = QS_Inicjuj(tab, 10);
   do
   {
      for(i = 0; i < 10; i++) printf("%d ", tab[i]);
      putchar('\n');
   }
   while(QS_Iteracja(qs));

   return 0;
}

Przerób sobie na CGI.

1 użytkowników online, w tym zalogowanych: 0, gości: 1