Cod sursa(job #247141)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 22 ianuarie 2009 10:49:42
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
#define fin "algosort.in"
#define fout "algosort.out"

int v[50001], n, i, k ;
void swap(int &first, int &second)
{
 int aux;
 aux = first;
 first = second;
 second = aux;
}

void quicksort(int a[], int l, int r)
{
 int i = l-1, j = r, p = l-1, q = r;
 int v = a[r];
 if( r <= l)
  return;
 for( ; ; )
 {
   while(a[++i] < v);
   while(v < a[--j])
	if(j == l)
	break;
   if(i >= j)
	break;

   swap(a[i], a[j]);

	if(a[i] == v)
	{
		p++;
		swap(a[p], a[i]);
	}
	if( v == a[j])
	{
		 q--;
		swap(a[j], a[q]);
	}

 }
  swap(a[i], a[r]);
  j = i-1;
  i = i+1;

  for( k = l; k < p; k++, j--)
   swap(a[k], a[j]);
  for( k = r-1; k > q; k--, i++)
   swap(a[i], a[k]);

  quicksort(a, l, j);
  quicksort(a, i ,r);



}

int main(void)
{
 freopen(fin, "r", stdin);
 freopen(fout, "w",stdout);

 for(i = 1; i <= n; i++)
   scanf("d", &v[i]);

 quicksort(v, 1, n);

 for( i = 1; i<=n; i++)
  printf("%d", v[i]);

  printf("\n");
  fcloseall();
  return 0;
}