You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.2 KiB
C

#define LOG_N 42
static int delta[LOG_N];
void make_delta(int N)
{
int power = 1;
int i = 0;
do
{
int half = power;
power <<= 1;
delta[i] = (N + half) / power;
}
while (delta[i++] != 0);
}
int unisearch(int *a, int key)
{
int i = delta[0]-1; /* midpoint of array */
int d = 0;
while (1)
{
if (key == a[i])
{
return i;
}
else if (delta[d] == 0)
{
return -1;
}
else
{
if (key < a[i])
{
i -= delta[++d];
}
else
{
i += delta[++d];
}
}
}
}
#define N 10
int main(void)
{
int num, a[N] = {1,3,5,6,7,9,14,15,17,19};
make_delta(N);
printf("\nEnter an element to search: ");
scanf("%d", &num);
printf("%d is at index %d\n", num, unisearch(a, num));
return 0;
}