Untitled
unknown
plain_text
2 months ago
8.4 kB
5
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// Funkcija za usporedbu potrebna za qsort (za binarno pretraživanje)
int usporedi(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
FILE *fp;
int polje[500], trazeni[5], i, j;
int sekv_koraci[5], bin_koraci[5];
int sekv_nasao[5] = {0}, bin_nasao[5] = {0};
srand(time(NULL));
// Generiranje datoteke
fp = fopen("dat.txt", "w");
for (i = 0; i < 500; i++) fprintf(fp, "%d ", rand() % 1001);
fclose(fp);
// Unos 5 brojeva
printf("Unesite 5 brojeva [1, 1000]:\n");
for (i = 0; i < 5; i++) scanf("%d", &trazeni[i]);
// Učitavanje iz datoteke u polje
fp = fopen("dat.txt", "r");
for (i = 0; i < 500; i++) fscanf(fp, "%d", &polje[i]);
fclose(fp);
// --- Sekvencijalno pretraživanje ---
for (i = 0; i < 5; i++) {
for (j = 0; j < 500; j++) {
if (polje[j] == trazeni[i]) {
sekv_nasao[i] = 1;
sekv_koraci[i] = j + 1;
break;
}
}
}
// --- Binarno pretraživanje (zahtijeva sortirano polje) ---
qsort(polje, 500, sizeof(int), usporedi);
for (i = 0; i < 5; i++) {
int lijevo = 0, desno = 499, koraci = 0;
while (lijevo <= desno) {
koraci++;
int sredina = lijevo + (desno - lijevo) / 2;
if (polje[sredina] == trazeni[i]) {
bin_nasao[i] = 1;
bin_koraci[i] = koraci;
break;
}
if (polje[sredina] < trazeni[i]) lijevo = sredina + 1;
else desno = sredina - 1;
}
}
// --- Ispis rezultata ---
printf("\nREZULTATI:\nSekvencijalno:\n");
float suma_sekv = 0, br_sekv = 0;
for (i = 0; i < 5; i++) {
if (sekv_nasao[i]) {
printf("%d. broj %d je pronadjen u %d koraka.\n", i + 1, trazeni[i], sekv_koraci[i]);
suma_sekv += sekv_koraci[i]; br_sekv++;
} else printf("%d. broj %d nije pronadjen.\n", i + 1, trazeni[i]);
}
printf("Binarno:\n");
float suma_bin = 0, br_bin = 0;
for (i = 0; i < 5; i++) {
if (bin_nasao[i]) {
printf("%d. broj %d je pronadjen u %d koraka.\n", i + 1, trazeni[i], bin_koraci[i]);
suma_bin += bin_koraci[i]; br_bin++;
} else printf("%d. broj %d nije pronadjen.\n", i + 1, trazeni[i]);
}
if (br_sekv > 0) printf("Srednji broj koraka za sekvencijalno: %.2f\n", suma_sekv / br_sekv);
if (br_bin > 0) printf("Srednji broj koraka za binarno: %.2f\n", suma_bin / br_bin);
return 0;
}
Editor is loading...
Leave a Comment