Salve a tutti, ho riscontrato un problema nel mio codice per trovare un elemento di un determinato vettore usando la ricerca binaria (chiamata anche dicotomica), il problema si sviluppa nel momento appunto della ricerca, non rileva l'elemento in questione. Questo è il codice:
codice:
//
// main.c
// vettore , ordinarlo + ricerca dicotomica
//
// Created by Luciano Gavoni on 23/04/13.
// Copyright (c) 2013 Luciano Gavoni. All rights reserved.
//
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void caricaVettore( int vett[]);
void ordinamento( int vett[]);
void scambia( int vett[], int k, int p);
void stampa( int vett[] );
int ricercaDic (int x, int vett[]);
#define MAX 100
int main(int argc, char const *argv[])
{
int vett[ MAX ], num;
caricaVettore( vett );
ordinamento( vett );
stampa( vett );
printf("Quale numero vuoi cercare?\n");
scanf("%d", &num);
if ( ricercaDic(num, vett) == 1 )
printf("Il numero da lei inserito è stato trovato\n");
else
printf("Il numero da lei inserito non è stato trovato\n");
return 0;
}
void caricaVettore( int vett[])
{
srand( (unsigned) time( NULL ) );
for (int i = 0; i < MAX; ++i)
vett[ i ] = 1 + rand() % 1000;
}
void ordinamento( int vett[])
{
int i, j;
for (i = 0; i < MAX -1; i++)
for( j = i + 1; j < MAX; j++)
if ( vett[i] > vett[j])
scambia(vett, i, j );
}
void scambia( int vett[], int k, int p )
{
int app = 0;
app = vett[ k ] ;
vett[ k ] = vett[ p ];
vett[ p ] = app;
}
void stampa( int vett[])
{
int cont = 0;
printf("I numeri generati casualmente e ordinati in ordine crescente sono:\n");
for (int i = 0; i < MAX; ++i){
printf("%3d\t", vett[i] );
if ( cont == 5 ){
printf("\n");
cont = 0;
}
cont++;
}
}
int ricercaDic (int x, int vett[])
{
int sx, dx, md, trovato;
sx = trovato = 0;
dx = MAX - 1 ;
do
{
md = ( sx + dx) / 2;
if ( (vett[ md ] == x) || (vett[ sx ] == x) || (vett[ dx ] == x ) )
trovato = 1;
else if ( vett[ md ] > x )
dx = md - 1;
else
sx = md + 1;
} while (sx < md && !trovato );
return trovato;
}