quicksort.vala 973 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. void quicksort(ref int[] l, int lo, int hi) {
  2. if (lo < hi) {
  3. var p = partition(ref l, lo, hi);
  4. quicksort(ref l, lo, p - 1);
  5. quicksort(ref l, p + 1, hi);
  6. }
  7. }
  8. int partition(ref int[] l, int lo, int hi) {
  9. var pivot = l[hi];
  10. var tmp = 0;
  11. var i = lo - 1;
  12. for (int j = lo; j < hi; j++) {
  13. if (l[j] < pivot) {
  14. i++;
  15. tmp = l[j];
  16. l[j] = l[i];
  17. l[i] = tmp;
  18. }
  19. }
  20. tmp = l[hi];
  21. l[hi] = l[i+1];
  22. l[i+1] = tmp;
  23. return i+1;
  24. }
  25. static void main() {
  26. var q = 1000000;
  27. var vals = new int[q];
  28. for (int i = 0; i < q; i++) {
  29. vals[i] = Random.int_range(0,q);
  30. }
  31. var start = new DateTime.now_local();
  32. quicksort(ref vals, 0, vals.length);
  33. stdout.printf("ended after: %s\n", (
  34. (new DateTime.now_local()).difference(start)).to_string()
  35. );
  36. /*for (int i = 0; i < q; i++) {
  37. vals[i] = Random.int_range(0,q);
  38. }*/
  39. }