Qualcuno mi saprebbe dire qual'è la complessità di spazio di questo algoritmo:
codice:
#include <stdio.h>
#include <malloc.h>
/* PROTOTIPO FUNZIONE */
void bin_search(int *A, int n, int chiave, int ris[3]);
/* PROGRAMMA CHIAMANTE */
main()
{
/* DICHIARAZIONE VARIABILI */
int *A, out[3], chiave;
int i, c;
int n, posiz;
/* LETTURA ELEMENTI ARRAY */
printf("Inserire il numero di elementi formanti l'array: ");
scanf("%d",&n);
/* ALLOCAZIONE DINAMICA DELLA MEMORIA */
if(!(A = (int *)malloc(n*sizeof(int))))
abort();
/* LETTURA ELEMENTI ARRAY */
printf("\n");
for (i=0; i<=n-1; i++){
printf("Inserire il valore dell'elemento %d: ", c=i+1);
scanf("%d", &A[i]);
}
/* NUMERO DA RICERCARE */
printf("\nInserire il numero che si desidera individuare: ");
scanf("%d", &chiave);
/* RICHIAMO FUNZIONE E STAMPA RISULTATO */
bin_search(A, n, chiave, out);
/* VERIFICO SE L’ELEMENTO E’ STATO TROVATO (ovvero se out[0]==1) */
if(out[0]==1){
printf("\nIl valore %d è presente ed è l'elemento %d dell'array!\n", out[1], out[2]+1);}
else {
printf("\nIl valore %d non è presente nell'array!\n",out[1]);}
/* RILASCIO DELLA MEMORIA OCCUPATA DALL’ ARRAY */
free(A);
return 0;
}
/****************** SPECIFICHE FUNZIONE *************************/
void bin_search(int *A, int n, int chiave, int ris[3]) {
int alto, basso, centro, pos;
alto = 0;
basso = n-1;
pos = -1;
do {
centro = (alto+basso)/2;
if (A[centro]==chiave)
{pos = centro;}
else if (A[centro]<chiave)
{alto = centro+1;}
else
{basso = centro-1;}
}
while(alto<=basso && pos==-1);
if(pos!= -1){
ris[0] = 1;
ris[1] = chiave;
ris[2] = pos; }
else {
ris[0] = 0;
ris[1] = chiave;
}
}