Saltar al contenido
Portada » Ordenación Quicksort

Ordenación Quicksort

Algoritmo Quicksort

  • Entre el conjunto de elementos a ordenar se selecciona uno, llamado pivote.
  • Se colocan todos los elementos a la derecha y a la izquierda del pivote según el criterio de ordenación. De esta forma el elemento pivote estará en su lugar correspondiente del listado.
  • El paso anterior se repite para cada sub-lista, seleccionando un nuevo pivote. Cuando alguna sub-lista tenga un solo elemento el algoritmo termina.

Complejidad

En el caso en que los pivotes sean un extremo de la lista la complejidad es de O(n2). De media la complejidad del algoritmo es de O(nlogn). Por tanto, la selección del pivote es un paso clave que nos ayudará a mejorar la eficiencia del algoritmo.

Código en Java

public class Quicksort 
{

	public static void main(String[] args)
	{
		Quicksort qs = new Quicksort();
		
		int numerosAOrdenar[] = {3,5,1,34,22,1,67,32,78,5};
		
		qs.quickSort(numerosAOrdenar, 0, numerosAOrdenar.length-1);
		
		for(int i=0; i<numerosAOrdenar.length;i++)
		{
			System.out.print(numerosAOrdenar[i]+", ");
		}

	}
	

	private void quickSort(int numerosAOrdenar[], int izq, int der) 
	{
		  int pivote = numerosAOrdenar[izq]; 
		  int i=izq;        
		  int j=der;    
		  int auxiliar;
		 
		  while(i < j)
		  {                                                    
		     while(numerosAOrdenar[i] <= pivote && i < j) i++; 
		     while(numerosAOrdenar[j] > pivote) j--;          
		     if (i < j) 
		     {                                         
		    	 auxiliar = numerosAOrdenar[i];                   
		    	 numerosAOrdenar[i] = numerosAOrdenar[j];
		    	 numerosAOrdenar[j] = auxiliar;
		     }
		   }
		   
		  numerosAOrdenar[izq] = numerosAOrdenar[j];                                      
		  numerosAOrdenar[j] = pivote;     
		   
		   if(izq < j-1)
		   {
			   quickSort(numerosAOrdenar,izq,j-1);          
		   }
		   if(j+1 < der)
		   {
			   quickSort(numerosAOrdenar,j+1,der);          
		   } 
	}

}

Más algoritmos de ordenación y búsqueda

AsuntoDescripción
Ordenación BurbujaOrdenación algoritmo BubbleSort.
Ordenación InserciónAlgoritmo de ordenación por inserción
Ordenación SelecciónAlgoritmo de ordenación por selección
Ordenación QuicksortAlgoritmo de ordenación eficiente Quicksort
Búsqueda BinariaAlgoritmo de búsqueda binaria
Patrones: Algoritmo ZDetección de patrones con algoritmo Z
Patrones: Algoritmo NaiveDetectar patrones con algoritmo ingenuo o naive
Algoritmo de Dijkstra Como encontrar el camino más corto entre dos nodos en un grafo ponderado
Algoritmo de KruskalSe utiliza para encontrar el árbol de expansión mínimo en un grafo ponderado

Recursos básicos Java

AsuntoDescripción
Tutorial básico y sintaxisTutorial básico Java y sintaxis. Aprende los fundamentos del lenguaje.
Hilos (Threads)Aprende a manejar hilos y las cuestiones básicas de la concurrencia
Funciones LambdaAquí te enseñamos las nociones más importantes para arrancas con funciones lambda
PalíndromosPrograma de ejemplo para el uso de palíndromos en Java.
Máquina Virtual de JavaTe explicamos el funcionamiento de la máquina virtual de java (Java Virtual Machine – JVM)
JDK, JRE y JVMDiferencias entre el JDK, JRE y JVM.
Mejores libros Java en EspañolHazte con los mejores libros Java para aprender paso a paso y profundizar en las mejores prácticas
TensorFlowManejo del API de TensorFlow para la construcción de grafos de operaciones y su ejecución
Tutorial Log4jTutorial para el manejo de Log4j, herramienta ágil y flexible para la gestión de Logs en Java
Java SecurityEntiende y aplica las posibilidades que da Java para mantener la seguridad
Tutorial JConsoleAprende los conceptos básicos de monitorización de procesos Java con JConsole
JavaFXTutorial de JavaFX, librería gráfica moderna para construcción de GUIs en móvil, escritorio y web.
Estructuras de datos en JavaExplicación y ejemplos de las estructuras de datos más importantes: listas, pila, cola, arbol.
JavaapiConjunto de clases, interfaces, métodos y paquetes que forman parte de la plataforma Java estándar
Algoritmo HuffmanMétodo eficiente para codificar datos, asignando códigos más cortos a los caracteres más frecuentes