#include<stdio.h>
#include<stdlib.h>
typedef struct List {
int* data;
int lenght;
int num;
}List;
List* initList(int lenght) {
List* L = (List*)malloc(sizeof(List));
L->data = (int*)malloc(sizeof(int)*lenght);
L->lenght = lenght;
L->num = 0;
return L;
}
void listAdd(int data,List*L) {
L->data[L->num] = data;
L->num = (L->num) + 1;
}
void printList(List*L) {
for (int i = 0; i < L->num; i++)
{
printf("%d->",L->data[i]);
}
printf("NULL\n");
}
int binarySearch(int key, List* L) {
int start = 0;
int end = (L->num)-1;
int mid;
while (start<=end)
{
mid = (start + end) / 2;
if (L->data[mid]<key)
{
start = mid + 1;
}
else if(L->data[mid] >key)
{
end = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
int binarySearchRecursion(int key, List* L, int start, int end) {
if (start==end)
{
if (L->data[start]==key)
{
return start;
}
else
{
return -1;
}
}
int mid = (start + end) / 2;
if (L->data[mid]<key)
{
return binarySearchRecursion(key, L, mid + 1, end);
}
else if (L->data[mid] > key)
{
return binarySearchRecursion(key, L, start, mid - 1);
}
else
{
return mid;
}
}
int main() {
List* list = initList(9);
listAdd(1, list);
listAdd(2, list);
listAdd(3, list);
listAdd(4, list);
listAdd(5, list);
listAdd(6, list);
listAdd(7, list);
listAdd(8, list);
listAdd(9, list);
printList(list);
printf("data %d in %d\n", 7, binarySearch(7, list));
printf("data %d in %d\n", 10, binarySearch(10, list));
printf("data %d in %d\n", 1, binarySearch(1, list));
printf("data %d in %d\n", 3, binarySearch(3, list));
printf("\n");
printf("data %d in %d\n", 7, binarySearchRecursion(7, list, 0, list->num - 1));
printf("data %d in %d\n", 10, binarySearchRecursion(10, list, 0, list->num - 1));
printf("data %d in %d\n", 1, binarySearchRecursion(1, list, 0, list->num - 1));
printf("data %d in %d\n", 3, binarySearchRecursion(3, list, 0, list->num - 1));
return 0;
}
参考: