// SortDemo
//
// This macro demonstrates how to sort an array 
// of numbers or an array of strings.

  a = newArray(10, 1, 7, 3, 15, 4, 12);
  sort(a);
  list(a);

  a = newArray("dog","cat","rabbit","mouse","fish","bird");
  sort(a);
  list(a);

  n=10000; a = newArray(n);
  for (i=0; i<n; i++) a[i] = random();
  start = getTime();
  sort(a);
  print(n+" numbers sorted in "+(getTime-start)+" msec");
  //list(a);

  function sort(a) {quickSort(a, 0, lengthOf(a)-1);}

  function quickSort(a, from, to) {
      i = from; j = to;
      center = a[(from+to)/2];
      do {
          while (i<to && center>a[i]) i++;
          while (j>from && center<a[j]) j--;
          if (i<j) {temp=a[i]; a[i]=a[j]; a[j]=temp;}
          if (i<=j) {i++; j--;}
      } while(i<=j);
      if (from<j) quickSort(a, from, j);
      if (i<to) quickSort(a, i, to);
  }

  function list(a) {
      for (i=0; i<a.length; i++)
          print(a[i]);
      print("");
  }