简单二分法查找_C

简单二分法查找_Python_02

C

#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "string.h"

unsigned int Search(char* list, int len, int num)
{

int min, max, mid_index;
min = 0;
max = len - 1;
mid_index = (min + max) / 2;
printf("min=%d, max=%d, mid_index=%d\r\n",min, max, mid_index);
if (list[min] == num)
{
printf("Find: index=%d, value=%d\r\n", min, list[min]);
return min;
}
else if (list[max] == num)
{
printf("Find: index=%d, value=%d\r\n", max, list[max]);
return max;
}
while (true)
{
if (list[mid_index] == num)
{
printf(">> Find: index=%d, value=%d\r\n", mid_index, list[mid_index]);
return mid_index;
}
else if (list[mid_index] > num)
{
printf(">> 大了 index=%d, value=%d\r\n", mid_index, list[mid_index]);
min = min;
max = mid_index;
mid_index = (min + max) / 2;
}
else
{
printf(">> 小了 index=%d, value=%d\r\n", mid_index, list[mid_index]);
min = mid_index;
max = max;
mid_index = (min + max) / 2;
}
}
}

int main()
{
char list[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int len = sizeof(list) / sizeof(char);
Search(list, len, 8);
return 0;
}

Python

def binarySearch(arr, val):
head = 0
end = len(arr)
mid = (head+end) // 2
if val > arr[end-1] or val < arr[head]:
print("No!")
return
while 1:
print(head, mid, end)
if val == arr[mid]:
print("Find!", arr[mid])
break
elif val < arr[mid]:
head = head
end = mid
mid = (head+end) // 2
elif val > arr[mid]:
head = mid
end = end
mid = (head + end) // 2



arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
binarySearch(arr, 10)

简单二分法查找_#include_03