Cod sursa(job #690840)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 25 februarie 2012 22:52:54
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
/*
 * algsort.cpp
 *
 *  Created on: Feb 25, 2012
 *      Author: ioana
 */
#include<cstdio>
int N;
template<class T>
class qSort
{
private:
	T *v;
	int N;
public:
	qSort(int N)
	{
		this->N=N;
		this->v = new T [N];
	}
	~qSort()
	{

	}
	qSort<T>* vector()
	{
		return this->v;
	}
	void pb(T x,int p)
	{
		this->v[p]=x;
	}
	T getVal (int p)
	{
		return this->v[p];
	}

};
qSort<int> v(500000);
void quickSort(qSort<int> arr, int left, int right)
{
      int i = left, j = right;
      int tmp;
      int pivot = arr.getVal((left + right) / 2);

      /* partition */
      while (i <= j)
      {
            while (arr.getVal(i) < pivot)
                  i++;
            while (arr.getVal(j) > pivot)
                  j--;
            if (i <= j) {
                  tmp = arr.getVal(i);
                  arr.pb(arr.getVal(j),i);
                  arr.pb(tmp,j);
                  i++;
                  j--;
            }
      };

      /* recursion */
      if (left < j)
            quickSort(arr, left, j);
      if (i < right)
            quickSort(arr, i, right);
}

int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	scanf("%d",&N);
	for (int i=0; i<N; ++i)
	{
		int x;
		scanf("%d",&x);
		v.pb(x,i);
	}

	quickSort(v,0,N-1);
	for (int i=0; i<N; ++i)
	{
		printf("%d ",v.getVal(i));
	}
	return 0;
}