Java
// Java implementation of iterative quick sort class IterativeQuickSort { void swap(int arr[], int i, int j) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; } /* This function is same in both iterative and recursive*/ int partition(int arr[], int l, int h) { int x = arr[h]; int i = (l - 1); for (int j = l; j <= h - 1; j++) { if (arr[j] <= x) { i++; // swap arr[i] and arr[j] swap(arr, i, j); } } // swap arr[i+1] and arr[h] swap(arr, i + 1, h); return (i + 1); } // Sorts arr[l..h] using iterative QuickSort void QuickSort(int arr[], int l, int h) { // create auxiliary stack int stack[] = new int[h - l + 1]; // initialize top of stack int top = -1; // push initial values in the stack stack[++top] = l; stack[++top] = h; // keep popping elements until stack is not empty while (top >= 0) { // pop h and l h = stack[top--]; l = stack[top--]; // set pivot element at it's proper position int p = partition(arr, l, h); // If there are elements on left side of pivot, // then push left side to stack if (p - 1 > l) { stack[++top] = l; stack[++top] = p - 1; } // If there are elements on right side of pivot, // then push right side to stack if (p + 1 < h) { stack[++top] = p + 1; stack[++top] = h; } } } // A utility function to print contents of arr void printArr(int arr[], int n) { int i; for (i = 0; i < n; ++i) System.out.print(arr[i] + " "); } // Driver code to test above public static void main(String args[]) { IterativeQuickSort ob = new IterativeQuickSort(); int arr[] = { 4, 3, 5, 2, 1, 3, 2, 3 }; ob.QuickSort(arr, 0, arr.length - 1); ob.printArr(arr, arr.length); } } /*This code is contributed by Rajat Mishra */
1 2 2 3 3 3 4 5
Complejidad de tiempo : O(n*log(n))
Espacio auxiliar : O(n)
Las optimizaciones mencionadas anteriormente para la ordenación rápida recursiva también se pueden aplicar a la versión iterativa. 1) El proceso de partición es el mismo tanto en recursivo como iterativo. Las mismas técnicas para elegir el pivote óptimo también se pueden aplicar a la versión iterativa. 2) Para reducir el tamaño de la pila, primero presione los índices de la mitad más pequeña. 3) Utilice la ordenación por inserción cuando el tamaño se reduzca por debajo de un umbral calculado experimentalmente. Consulte el artículo completo sobre clasificación rápida iterativa para obtener más detalles.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA