01: // bsearch()
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 generare? ");
15: scanf("%d", &n);
16:
17: int a[n]; // VLA e' comunque limitato come dimensioni massime
18:
19: // genera array ordinato, banalmente metto nel mio array numeri sempre crescenti sommando al precedente elemento uno step casuale
20: a[0] = 1;
21: for (int i=1; i<n; i++)
22: a[i]=a[i-1] + rand()%10 + 1;
23:
24: // visualizza array mescolato
25: printf("ARRAY GENERATO\n");
26: stampaarray(a,n);
27:
28: int k;
29: printf("Dimmi che numero vuoi ricercare: ");
30: scanf("%d", &k);
31:
32: // invoco ordinamento
33: int *risultato = bsearch(&k, a, n, sizeof(a[0]), mycomp);
34:
35: if(risultato)
36: {
37: printf("Il numero ricercato si trova all'indice %ld\n", risultato - a);
38: }
39: else
40: {
41: printf("Numero non presente nell'array\n");
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