简单二分法查找

时间:2022-07-23
本文章向大家介绍简单二分法查找,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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=%drn",min, max, mid_index);
	if (list[min] == num)
	{
		printf("Find: index=%d, value=%drn", min, list[min]);
		return min;
	}
	else if (list[max] == num)
	{
		printf("Find: index=%d, value=%drn", max, list[max]);
		return max;
	}
	while (true)
	{
		if (list[mid_index] == num)
		{
			printf(">> Find: index=%d, value=%drn", mid_index, list[mid_index]);
			return mid_index;
		}
		else if (list[mid_index] > num)
		{
			printf(">> 大了 index=%d, value=%drn", mid_index, list[mid_index]);
			min = min;
			max = mid_index;
			mid_index = (min + max) / 2;
		}
		else
		{
			printf(">> 小了 index=%d, value=%drn", 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)