Pagini recente » Cod sursa (job #2703139) | Cod sursa (job #1415308) | Cod sursa (job #896554) | Cod sursa (job #3273330) | Cod sursa (job #762090)
Cod sursa(job #762090)
/*
Algoritm de cautare binara.
*/
#include <stdio.h>
#define MAX 100000
int numere[MAX];
int cautbin_0 (int start, int stop, int x) {
int mid;
while (start <= stop) {
mid = start + (stop - start) / 2;
if (numere[mid] > x)
stop = mid - 1;
else
start = mid + 1;
}
mid = start + (stop - start) / 2;
if (numere[mid] > x)
mid--;
if (numere[mid] == x)
return mid;
return -1;
}
int cautbin_1 (int start, int stop, int x) {
int mid;
while (start < stop) {
mid = start + (stop - start) / 2;
if (numere[mid] <= x)
start = mid + 1;
else
stop = mid;
}
mid = start + (stop - start) / 2;
if (numere[mid] > x)
mid--;
return mid;
}
int cautbin_2 (int start, int stop, int x) {
int mid;
while (start < stop) {
mid = start + (stop - start) / 2;
if (numere[mid] >= x)
stop = mid;
else
start = mid + 1;
}
mid = start + (stop - start) / 2;
if (numere[mid] < x)
mid++;
return mid;
}
int main () {
int n, m;
int q, x;
int i;
FILE *f_in = fopen("cautbin.in", "r");
FILE *f_out = fopen("cautbin.out", "w");
fscanf(f_in, "%d", &n);
for (i = 1; i <= n; i++)
fscanf(f_in, "%d", &numere[i]);
fscanf(f_in, "%d", &m);
for (i = 0; i < m; i++) {
fscanf(f_in, "%d %d", &q, &x);
switch (q) {
case 0:
fprintf(f_out, "%d\n", cautbin_0(1, n, x)); break;
case 1:
fprintf(f_out, "%d\n", cautbin_1(1, n, x)); break;
default:
fprintf(f_out, "%d\n", cautbin_2(1, n, x)); break;
}
}
fclose(f_in);
fclose(f_out);
return 0;
}