import java.util.*;
import java.io.*;
/**
* Clase que implementa el algoritmo de ordenamiento BubbleSort, el cual es una extension de la Superclase Ordenador.
* @author Alejandro Merello - Felipe Diaz
*/
public class BubbleSorter extends Ordenador{
	boolean sorted = false;
	public void ordenar(Comparable[] A){
		largoLista = A.length;

		for(int top = (largoLista -1);top > 0 && !sorted; top--){
			sorted = true;
			for(int i = 1; i <= top;i++){
				numComparaciones++;     	
				if(A[i].compareTo(A[i-1])==-1){
					sorted = false;
					Comparable aux = A[i];
					A[i]=A[i-1];
					A[i-1]=aux;
					numIntercambios++;
				}
			}
		}			
	}
	
	/**
	* Retorna el numero de comparaciones
	*/
	public int getNumComparaciones(){return numComparaciones;}
	
	/**
	* Retorna el numero de intercambios
	*/
	public int getNumIntercambios(){return numIntercambios;}

	/**
	*Genera un string con todos los datos entregados por el ordenamiento.
	* @return String con nombre del algoritmo de ordenamiento, el largo del arreglo, el numero de comparaciones utilizado, y el numero de intercambios.
	*/  
	public String toString(){
		return new String("BUBBLESORT"+"\nLargo del arreglo: " +largoLista +"\nNumero de comparaciones: " +numComparaciones +"\nNumero de intercambios: " +numIntercambios);
	}

	private int largoLista;
	private int numComparaciones;
	private int numIntercambios;	
}