//package poo.ordenadores;
/**
 * clase que implementa  metodos de Ordenador y relaiza ordenamiento del tipo bubblesort.
 * @param A Arreglo de objetos comparables que se decea ordenar.
 */
public class BubbleSorter extends Ordenador {
	/**
	*  Metodo heredado de Ordenador. 
	*/
	public int getNumComparaciones() {
		return this.num_comparaciones;
	}
	/**
	 * 	Metodo heredado de Ordenador. 
	 */
	public int getNumIntercambios() {
		return this.num_intercambios;
	}

	public void ordenar(Comparable[] A) {
		int out, in;
		int largo = A.length;
		
		for(out=largo-1; out>1; out--)                 // outer loop (backward)
			for(in=0; in<out; in++) {                   // inner loop (forward)
				if( A[in+1].compareTo(A[in])< 1 ) {     // out of order?
					Comparable temp = A[in];         // swap them
					A[in] = A[in+1];
					A[in+1] = temp;  
					num_intercambios++;
				}
				
				num_comparaciones++;
			}

		
	/*	 De Mayor a Menor
	 * 
	  for(out=largo-1; out>1; out--)                 // outer loop (backward)
			for(in=0; in<out; in++) {                   // inner loop (forward)
				if( A[in].compareTo(A[in+1])<1 ) {     // out of order?
					Comparable temp = A[in+1];         // swap them
					A[in+1] = A[in];
					A[in] = temp;  
					num_intercambios++;
				}
				num_comparaciones++;
			}*/
	}


	public String toString() {
		return "BUBBLE SORTER";
	}
	
	private int num_intercambios = 0;
	private int num_comparaciones = 0;
}
