]> matita.cs.unibo.it Git - pkg-cerco/acc.git/blob - tests/tmp_tests/Backend/quicksort_u.c
Package description and copyright added.
[pkg-cerco/acc.git] / tests / tmp_tests / Backend / quicksort_u.c
1
2 #define SIZE 5
3
4 void swap (unsigned char a[], unsigned char i, unsigned char j) {
5   unsigned char t;
6   t = a[i] ; a[i] = a[j] ; a[j] = t;
7 }
8
9 unsigned char partition (unsigned char a[], unsigned char l, unsigned char r) {
10    unsigned 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 (unsigned char a[], unsigned char l, unsigned char r) {
25    unsigned 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 (unsigned char tab[], unsigned char size) {
35   unsigned char i;
36
37   for (i = 0 ; i < size ; i++) {
38     print_uchar(tab[i]);
39     space();
40   }
41   newline();
42 }
43
44 unsigned char main () {
45   unsigned 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 }