#include <stdio.h>
#include <stdlib.h>

void quicksort(double *A, int len);
 
int main (void) {
  int n = 10000000;
  double *a = (double*)malloc(n * sizeof (double));

  int i;
  for (i = 0; i < n; i++) {
    a[i] = rand();
  }
  
/* 
  double a[] = {4, 65, 2, -31, 0, 99, 2, 83, 782, 1};
  int n = sizeof a / sizeof a[0];
  int i;
  for (i = 0; i < n; i++) {
    printf("%d ", a[i]);
  }
  printf("\n");
 */
  quicksort(a, n);
 /*
  for (i = 0; i < n; i++) {
    printf("%f ", a[i]);
  }
  printf("\n");
 */
  return 0;
}
 
void quicksort(double *A, int len) {
  if (len < 2) return;
 
  int pivot = A[len / 2];
 
  int i, j;
  for (i = 0, j = len - 1; ; i++, j--) {
    while (A[i] < pivot) i++;
    while (A[j] > pivot) j--;
 
    if (i >= j) break;
 
    double temp = A[i];
    A[i]     = A[j];
    A[j]     = temp;
  }
 
  quicksort(A, i);
  quicksort(A + i, len - i);
}
 