// Fonction de tri rapide (Quick Sort)

template <typename T>
int Partition(T Tableau[], int inf, int sup)
{
	T Pivot, Tampon;
	int i, j;

	Pivot = Tableau[(sup+inf)/2];
	i = inf - 1;
	j = sup + 1;

	// Tant que les indices ne se croisent pas
	while (i < j)
	{
		// Conserver les éléments plus petis ou égaux au pivot à gauche
		do
		{
			i++;
		}
		while (Tableau[i] < Pivot);

		// Conserver les éléments plus grands ou égaux au pivot à droite
		do
		{
			j--;
		}
		while (Tableau[j] > Pivot);

		// Permuter les éléments qui ne sont pas à leur place
		if (i < j)
		{
			Tampon = Tableau[i];
			Tableau[i] = Tableau[j];
			Tableau[j] = Tampon;
		}
	}

	return j;
}


// Fonction Quick Sort
template <class T>
void Tri(T Tableau[], int inf, int sup)
{
	int milieu;

	if (sup > inf) // S'il y a au moins 2 éléments
	{
		milieu = Partition(Tableau, inf, sup);

		// Trier la partie de gauche et la partie de droite
		Tri(Tableau, inf, milieu);
		Tri(Tableau, milieu + 1, sup);
	}
}