#include <stdio.h>
#include <conio.h>
void SortQuick(int *a, int sFrom, int sTo);
// Quicksort done recursively.
main()
{
int i, array[5];
array[0] = 24;
array[1] = -30;
array[2] = 1;
array[3] = -33;
array[4] = 82;
printf ("%s", "Sorting...\n\n");
printf ("%s", " i \t array(i)\n");
printf ("%s", "---\t --------\n");
for (i = 0; i < 5; i++)
{
printf ("%d \t %d\n", i, array[i]);
}
SortQuick(array, 0, 4);
printf ("%s", "Sorting...\n");
printf ("%s", " i \t array(i)\n");
printf ("%s", "---\t --------\n");
for (i = 0; i < 5; i++)
{
printf ("%d \t %d\n", i, array[i]);
}
getche();
return(0);
}
void SortQuick(int *a, int sFrom, int sTo)
{
int i, j, atRandom, temp, test;
if (sFrom >= sTo)
return;
if (sFrom + 1 == sTo)
{
if (a[sFrom] > a[sTo])
{
temp = a[sFrom];
a[sFrom] = a[sTo];
a[sTo] = temp;
}
return;
}
else
{
atRandom = (sFrom + sTo) / 2;
test = a[atRandom];
temp = a[atRandom];
a[atRandom] = a[sTo];
a[sTo] = temp;
do
{
for(i = sFrom; i < sTo - 1; i++)
{
if (a[i] > test)
break;
}
for(j = sTo; j > i + 1; j--)
{
if (a[j] < test)
break;
}
if (i < j)
{
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
} while (i < j-1);
temp = a[sTo];
a[sTo] = a[i];
a[i] = temp;
SortQuick(a, sFrom, i - 1);
SortQuick(a, i + 1, sTo);
}
}