折半查找
代碼:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define ARRAY_LEN 20
int binsearch(int x, int v[], size_t b, size_t e);
void sort(int v[], size_t b, size_t e);
int main(int argc, char *argv[])
{
int arr[ARRAY_LEN];
srand((int)time(NULL));
for (int i = 0; i != ARRAY_LEN; ++i)
arr[i] = 0 + rand() % 15;
sort(arr, 0, ARRAY_LEN);
for (int i = 0; i != ARRAY_LEN; ++i)
printf("%d ", arr[i]);
printf("\nfind 10 at index: %d\n", binsearch(10, arr, 0, ARRAY_LEN));
return 0;
}
int binsearch(int x, int v[], size_t b, size_t e)
{
int low = b;
int high = e - 1;
int mid = (low + high) / 2;
while (low <= high && v[mid] != x) {
if (x < v[mid])
high = mid - 1;
else
low = mid + 1;
mid = (low + high) / 2;
}
if (v[mid] == x)
return mid;
else
return -1;
}
void sort(int v[], size_t b, size_t e)
{
for (size_t i = b; i != e; ++i) {
for (size_t j1 = i+1; j1 != e; ++j1) {
if (v[j1] < v[i]) {
int item = v[j1];
v[j1] = v[i];
v[i] = item;
}
}
}
}