//Autor: Artur Czekalski (Sator)  www.epokaY.net/artur  artur@epokaY.net
#include "stdafx.h"
#include <windows.h> //GetTickCount()

const int RozTab = 10000000; //rozmiar tablicy
double Tab[RozTab]; //tablica do posortowania
//---------------------------------------------------------------------------
double x; //wartość sortowana
double w; //element do zamiany (takiego samego typu co Tab)
//---------------------------------------------------------------------------
void QuickSort(const int l, const int p) //tylko dwa konieczne parametry, bo funkcja jest rekurencyjna
{
 int i = l,  j = p;
 x = Tab[(l+p)/2]; //kryterium sortowania
 do
  {while (Tab[i] < x) ++i; //<x -rosnąco; >x -malejąco
   while (x < Tab[j]) --j; //x< -rosnąco; x< -malejąco
   if (i <= j)
    {w=Tab[i];  Tab[i]=Tab[j];  Tab[j]=w;
     ++i;  --j;
    }
  }
 while (i < j);
 if (l < j) QuickSort(l, j);
 if (i < p) QuickSort(i, p);
}
//===========================================================================
int main(int, char* [])
{
 int i, czas;
 for (i=0; i<RozTab; ++i)
  Tab[i] = RozTab-i + (i%17) + (i%991) + (i%12345);

 czas = GetTickCount();
 QuickSort(0, RozTab-1);
 czas = GetTickCount() - czas;

 //--Sprawdzenie posortowania
 for (i=1; i<RozTab; ++i)
  if (Tab[i-1] > Tab[i]) {printf("Nie posortowane od elementu nr %d\n", i);  break;}
 //---
 printf("\nVisual C++ 6.0: Czas=%d", czas);
 getchar();  return 0;
}