Algoritmo de ordenamiento por selección en Java (Selection sort)


En el post anterior hablamos sobre el https://devs4j.com/2018/12/19/algoritmo-de-la-burbuja-en-java-bubble-sort/ en este post veremos otro algoritmo de ordenamiento llamado por selección o (Selection sort).

De igual modo que con el método de la burbuja, el algoritmo de selección dividirá el arreglo en 2 particiones, una ordenada y una desordenada, durante la ejecución la partición ordenada irá creciendo y la desordenada irá disminuyendo.

Algoritmo

El algoritmo seguirá los siguientes pasos:

  • Se definirá un indice de partición (partitionIndex) en la última posición del arreglo
  • Se definirá un indice (i) para recorrer el arreglo
  • Se definirá una variable (maxValue) como el elemento mayor apuntando inicialmente al primer elemento
  • Se buscará el elemento mayor entre los elementos que se encuentren antes del partitionIndex se utilizará la variable maxValue para determinarlo.
  • El elemento mayor se intercambiará con el elemento en la posición partitionIndex.
  • Se reducirá en uno el partitionIndex.
  • Se reiniciará el valor del indice i a 0
  • El proceso anterior se repetirá hasta que el arreglo completo se ordene

Veamos el código

Una vez que entendimos el algoritmo veamos el código:

public class SelectionSort {

	public void sortArray(int[] array) {
		for (int i = array.length - 1; i > 0; i--) {
			int maxValue = 0;
			for (int j = 0; j < i; j++) {
				if (array[j + 1] > array[maxValue]) {
					maxValue = j + 1;
				}
			}
			swap(array, i, maxValue);
			printArray(array);
		}
	}

	public void printArray(int[] array) {
		for (int i = 0; i < array.length; i++) {
			System.out.printf("%d \t", array[i]);
		}
		System.out.println();
	}

	public void swap(int[] array, int a, int b) {
		int value = array[b];
		array[b] = array[a];
		array[a] = value;
	}

	public static void main(String[] args) {
		SelectionSort selectionSort = new SelectionSort();
		int[] array = { 10, 1, 5, 40, 12, 34, 44, 12, 11, 9 };
		selectionSort.printArray(array);
		selectionSort.sortArray(array);
		selectionSort.printArray(array);
	}
}

Ejecutando el algoritmo y analizando los resultados

10     1   5   40  12  34  44  12  11  9   
10     1   5   40  12  34  9   12  11  44  
10     1   5   11  12  34  9   12  40  44  
10     1   5   11  12  12  9   34  40  44  
10     1   5   11  9   12  12  34  40  44  
10     1   5   11  9   12  12  34  40  44  
10     1   5   9   11  12  12  34  40  44  
 9     1   5   10  11  12  12  34  40  44  
 5     1   9   10  11  12  12  34  40  44  
 1     5   9   10  11  12  12  34  40  44  
 1     5   9   10  11  12  12  34  40  44  

En la salida anterior podemos analizar el siguiente comportamiento:

  • Los elementos mayores se van colocando del lado derecho
  • El arreglo se va ordenando de derecha a izquierda
  • El partitionIndex se va moviendo hacia la izquierda
  • Se requiere un número menor de intercambios que en el algoritmo de la burbuja

Características del algoritmo

  • No requiere arreglos adicionales para el ordenamiento
  • La complejidad es de O(n²)
  • Requiere menos cambios que el algoritmo de la burbuja (Bubble sort) para ordenar el arreglo
  • Es un algoritmo inestable (Si existe un elemento duplicado cambiarán de posición)
  • Es más eficiente que el algoritmo de la burbuja (Bubble sort)

Para estar al pendiente sobre nuestro contenido nuevo síguenos en nuestras redes sociales  https://www.facebook.com/devs4j/ y https://twitter.com/devs4j.

Si hay algún algoritmo que te gustaría que desarrollemos coméntenlo en nuestras redes sociales o en la sección de comentarios del post.

Autor: Alejandro Agapito Bautista
Twitter: @raidentrance
Contacto:raidentrance@gmail.com

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s