CS3343/3341 Analysis of Algorithms |
Minimal Quicksort Implementation |
Quicksort Algorithm | |
---|---|
In Java | In C |
// Quicksort.java: carries out quicksort public class Quicksort { void quicksort(int[] A, int p, int r) { if (p < r) { int q = partition(A, p, r); quicksort(A, p, q-1); quicksort(A, q+1, r); } } int partition(int[] A, int p, int r) { int x = A[r]; int i = p - 1; for (int j = p; j < r; j++) { if (A[j] <= x) { i++; exchange(A, i, j); } } exchange(A, i+1, r); return i + 1; } void exchange(int[] A, int i, int j) { int temp = A[i]; A[i] = A[j]; A[j] = temp; } public static void main(String[] args){ int[] A = {16,19,9,5,13,8,7,4,21,2,6,11,18}; Quicksort q = new Quicksort(); q.quicksort(A, 0, A.length-1); for (int i = 0; i < A.length; i++) System.out.print(A[i] + " "); System.out.println(); } } | // quicksort.c: carries out quicksort #include <stdio.h> int partition(int[], int, int ); void exchange(int[], int , int ); void quicksort(int A[], int p, int r){ int q; if (p < r) { q = partition(A, p, r); quicksort(A, p, q-1); quicksort(A, q+1, r); } } int partition(int A[], int p, int r) { int x = A[r]; int i = p - 1; int j; for (j = p; j < r; j++) { if (A[j] <= x) { i++; exchange(A, i, j); } } exchange(A, i+1, r); return i + 1; } void exchange(int A[], int i, int j) { int temp = A[i]; A[i] = A[j]; A[j] = temp; } int main() { int A[] = {16,19,9,5,13,8,7,4,21,2,6,11,18}; int i; quicksort(A, 0, 12); for (i = 0; i < 13; i++) printf("%i ", A[i]); printf("\n"); } |
Common Output | |
2 4 5 6 7 8 9 11 13 16 18 19 21 |