|
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
/**
*
* Binarni vyhledavani
*
* @file binarySearch.c
*
* @author A. Zlamal
*
*/
#define DELKA_POLE 26 // muzeme potom delku pole menit jen na tomto miste
#define I_F_P "%d" // FORMATOVACI_PARAMETR pro scanf - musime menit jen na tomto miste podle myType
#define O_F_P "%2d " // FORMATOVACI_PARAMETR pro printf - musime menit jen na tomto miste podle myType
typedef int myType; // muzeme potom typ menit jen na tomto miste
typedef myType pole[DELKA_POLE]; // analogicky: lze typ pole pohodlne pouzivat
int main()
{
pole a;
int i, d, s, h;
myType ch;
srand(time(NULL));
a[0] = rand() % (4 + (rand() & 1));
for (i = 1; i < DELKA_POLE; ++i) {
a[i] = a[i-1] + 1 + rand() % (5 + (rand() % 3));
}
for (i = 0; i < DELKA_POLE; ++i) {
printf("%2d ", i);
}
printf("\n");
for (i = 0; i < DELKA_POLE; ++i) {
printf(O_F_P, a[i]);
}
printf("\n");
printf("Zadejte hodnotu, jez se ma nalezt: ");
scanf(I_F_P, &ch);
d = 0;
h = DELKA_POLE;
| |
/* Strukturovane ale s vyuzitim specifik jazyka C */
int r;
while ((r = a[(s = (d + h) / 2)] != ch) && d < h) {
if (a[s] > ch) {
h = s - 1;
} else {
d = s + 1;
}
}
if (r) {
s = -1;
} | /* Strukturovane ale bez vyuziti specifik jazyka C */
s = (d + h) / 2;
while (a[s] != ch && d < h) {
if (a[s] > ch) {
h = s - 1;
} else {
d = s + 1;
}
s = (d + h) / 2;
}
if (a[s] != ch) {
s = -1;
} | /* se "zakazanymi" breaky - vhodne pro funkci */
for (;;) { // tady lze "while (1) {"
s = (d + h) / 2;
if (a[s] == ch) {
break;
}
if (a[s] > ch) {
h = s - 1;
} else {
d = s + 1;
}
if (d >= h) {
s = -1;
break;
}
} |