Pagini recente » Cod sursa (job #2902059) | Cod sursa (job #1977991) | Cod sursa (job #2734496) | Istoria paginii runda/rundada | Cod sursa (job #1977988)
#include <stdio.h>
#include <stdlib.h>
int firstBinarySearch(int * v, int n, int number) {
int low = 0;
int high = n - 1;
int mid;
while (low <= high) {
mid = low + (high - low) / 2;
if (v[mid] <= number) {
low = mid + 1;
} else {
high = mid - 1;
}
}
// if the mid is off by one
if (v[mid] > number) {
mid--;
}
// if the number was found
if (v[mid] == number) {
return mid + 1;
}
// the number was not found
return -1;
}
int secondBinarySearch(int * v, int n, int number) {
int low = 0;
int high = n - 1;
int mid;
while (low < high) {
mid = low + (high - low) / 2;
if (v[mid] <= number) {
low = mid + 1;
} else {
high = mid - 1;
}
}
// if the mid is off by one
if (v[mid] > number) {
mid--;
}
// if the number was found
return mid + 1;
}
int thirdBinarySearch(int * v, int n, int number) {
int low = 0;
int high = n - 1;
int mid;
while (low < high) {
mid = low + (high - low) / 2;
if (v[mid] < number) {
low = mid + 1;
} else {
high = mid - 1;
}
}
// if the mid is off by one
if (v[mid] < number) {
mid++;
}
// if the number was found
return mid + 1;
}
int main(int argc, char * argv) {
int n; // array length
int i, m, command, number;
int * v;
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
// read the size of the array
scanf("%d", &n);
v = (int *)malloc(sizeof(int) * n);
if (!v) {
return -1;
}
// read the elements of the array
for (i = 0; i < n; i++) {
scanf("%d", &v[i]);
}
// read the number of querries
scanf("%d", &m);
for (i = 0; i < 3; i++) {
scanf("%d", &command);
scanf("%d", &number);
switch(command) {
case 0 :
printf("%d\n", firstBinarySearch(v, n, number));
break;
case 1 :
printf("%d\n", secondBinarySearch(v, n, number));
break;
case 2 :
printf("%d\n", thirdBinarySearch(v, n, number));
break;
default :
printf("ERROR! Bad input...");
break;
}
}
free(v);
return 0;
}