Pagini recente » Cod sursa (job #2245435) | Cod sursa (job #1541734) | Cod sursa (job #1634994) | Cod sursa (job #2826611) | Cod sursa (job #762086)
Cod sursa(job #762086)
/*
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 = (stop + start) / 2;
if (numere[mid] > x)
stop = mid - 1;
else
start = mid + 1;
}
mid = (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 = (stop + start) / 2;
if (numere[mid] <= x)
start = mid + 1;
else
stop = mid;
}
mid = (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 = (stop + start) / 2;
if (numere[mid] >= x)
stop = mid;
else
start = mid + 1;
}
mid = (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 = 0; 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(0, n - 1, x) + 1); break;
case 1:
fprintf(f_out, "%d\n", cautbin_1(0, n - 1, x) + 1); break;
default:
fprintf(f_out, "%d\n", cautbin_2(0, n - 1, x) + 1); break;
}
}
fclose(f_in);
fclose(f_out);
return 0;
}