modernc.org/ccgo/v3@v3.16.14/lib/testdata/CompCert-3.6/test/c/qsort.c (about) 1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <string.h> 4 5 void quicksort(int lo, int hi, int base[]) 6 { 7 int i,j; 8 int pivot,temp; 9 10 if (lo<hi) { 11 for (i=lo,j=hi,pivot=base[hi];i<j;) { 12 while (i<hi && base[i]<=pivot) i++; 13 while (j>lo && base[j]>=pivot) j--; 14 if (i<j) { temp=base[i]; base[i]=base[j]; base[j]=temp; } 15 } 16 temp=base[i]; base[i]=base[hi]; base[hi]=temp; 17 quicksort(lo,i-1,base); quicksort(i+1,hi,base); 18 } 19 } 20 21 int cmpint(const void * i, const void * j) 22 { 23 int vi = *((int *) i); 24 int vj = *((int *) j); 25 if (vi == vj) return 0; 26 if (vi < vj) return -1; 27 return 1; 28 } 29 30 #define NITER 10 31 32 int main(int argc, char ** argv) 33 { 34 int n, i, j; 35 int * a, * b; 36 37 if (argc >= 2) n = atoi(argv[1]); else n = 100000; 38 a = malloc(n * sizeof(int)); 39 b = malloc(n * sizeof(int)); 40 for (j = 0; j < NITER; j++) { 41 for (i = 0; i < n; i++) b[i] = a[i] = rand() & 0xFFFF; 42 quicksort(0, n - 1, a); 43 } 44 qsort(b, n, sizeof(int), cmpint); 45 for (i = 0; i < n; i++) { 46 if (a[i] != b[i]) { printf("Bug!\n"); return 2; } 47 } 48 printf("OK\n"); 49 return 0; 50 }