01: // qsort()
02: #include<stdio.h>
03: #include<stdlib.h>
04: #include<time.h>
05:
06: void stampaarray(int *, int);
07: int mycomp(const void*, const void*);
08:
09: int main(int argc, char **argv){
10:
11: srand(time(0));
12:
13: int n;
14: printf("Quanti elementi vuoi ordinare? ");
15: scanf("%d", &n);
16:
17: int a[n]; // VLA e' comunque limitato come dimensioni massime
18:
19: // genera array, banalmente metto nel mio array tutti i numeri da 1 a n
20: for (int i=0; i<n; i++)
21: a[i]=(i+1);
22:
23: // mescola gli elementi dell'array ovvero genero una coppia a caso e scambio gli elementi
24: for (int i=0; i<n; i++){
25: int j = rand()%n;
26: int t = a[i];
27: a[i] = a[j];
28: a[j] = t;
29: }
30: // visualizza array mescolato
31: printf("ARRAY DA ORDINARE\n");
32: stampaarray(a,n);
33:
34:
35: // invoco ordinamento
36: qsort(a, n, sizeof(a[0]), mycomp); // passo: 1. array, 2. n. elementi array, 3. dimensione ciascun elemento, 4. callback di comparazione
37:
38: // visualizza array ordinato
39: printf("ARRAY ORDINATO\n");
40: stampaarray(a,n);
41:
42:
43:
44: return 0;
45: }
46:
47: void stampaarray(int *a, int n){
48: int i;
49: if(n<200)
50: {
51: for (i=0; i<n; i++){
52: printf("%5d ",a[i]);
53: printf((i+1)%15 ? "" : "\n");
54: }
55: }
56: else
57: {
58: printf(" Array troppo grosso, mi limito a stampare i primi 30 e gli ultimi 30 elementi\n");
59:
60: for (i=0; i<30; i++){
61: printf("%5d ",a[i]);
62: printf((i+1)%15?"":"\n");
63: }
64: printf(" ...\n");
65: for (i=n-30; i<n; i++){
66: printf("%5d ",a[i]);
67: printf((n-i-1)%15?"":"\n");
68: }
69: }
70:
71: printf("\n");
72: }
73:
74: // deve restituire valore < = > 0 a seconda del confronto, occorre cast visto che obbligatorio usare void*
75: int mycomp(const void* a, const void* b){
76:
77: int ai = *((int*)a); // a e' puntatore a void (int*)a e' puntatore a int, *((int *)a) e' l'int contenuto all'indirizzo in a
78: int bi = *((int*)b);
79:
80: return ai-bi;
81: }
82:
83:
84:
Se avete commenti o osservaƶioni su questa pagina
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it