]> matita.cs.unibo.it Git - pkg-cerco/acc.git/blob - tests/tmp_tests/Backend/quicksort.c
Package description and copyright added.
[pkg-cerco/acc.git] / tests / tmp_tests / Backend / quicksort.c
1
2 #define SIZE 5
3
4 void swap (signed char a[], signed char i, signed char j) {
5   signed char t;
6   t = a[i] ; a[i] = a[j] ; a[j] = t;
7 }
8
9 signed char partition (signed char a[], signed char l, signed char r) {
10    signed char pivot, i, j;
11    pivot = a[l];
12    i = l; j = r+1;
13                 
14    while (1) {
15      while (i <= r && a[i] <= pivot) ++i;
16      do --j; while (a[j] > pivot);
17      if (i >= j) break;
18      swap(a, i, j);
19    }
20    swap(a, l, j);
21    return j;
22 }
23
24 void quicksort (signed char a[], signed char l, signed char r) {
25    signed char j;
26
27    if (l < r) {
28      j = partition(a, l, r);
29      quicksort(a, l, j-1);
30      quicksort(a, j+1, r);
31    }
32 }
33
34 void print_tab (signed char tab[], signed char size) {
35   signed char i;
36
37   for (i = 0 ; i < size ; i++) {
38     print_schar(tab[i]);
39     space();
40   }
41   newline();
42 }
43
44 signed char main () {
45   signed char tab[SIZE] = {26, -21, 43, -62, 8};
46
47   quicksort(tab, 0, SIZE-1);
48   print_tab(tab, SIZE);
49
50   return 0;
51 }