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 | |