一、C 程序实现
/*******************************************************************************************
*Description 二分查找算法
*Author liaoxiongxiong
*Version 1.0
*Time 2018-06-28
*******************************************************************************************/
#include <stdio.h>
//二分查找(折半查找),版本1
int BinarySearch1(int a[], int value, int n)
{
int low, high, mid;
low = 0;
high = n-1;
while(low<=high)
{
mid = (low+high)/2;
if(a[mid] == value)
return mid;
if(a[mid]>value)
high = mid-1;
if(a[mid]<value)
low = mid+1;
}
return -1;
}
//二分查找,递归版本
int BinarySearch2(int a[], int value, int low, int high)
{
int mid = low+(high-low)/2;
if(a[mid]==value)
return mid;
if(a[mid]>value)
return BinarySearch2(a, value, low, mid-1);
if(a[mid]<value)
return BinarySearch2(a, value, mid+1, high);
return -1;
}
//测试用例
int main()
{
int a[]={0,1,2,3,4,5,6,7,8,9};
int len = sizeof(a)/sizeof(a[0]);
int x=2; // 需要查找的元素
int i = BinarySearch2(a, x, 0, len-1);
if(i!=-1)
printf("元素 %d 在第 %d 个位置\n",x,i+1);
else
printf("没有找到元素:%d\n",x);
return 0;
}
运行结果:
二、Java 程序实现
/**
* @description: 二分查找算法
* @author: liaoxiongxiong
* @version: 1.0
* @date: 2018-06-28
*/
public class BinarySearch {
//二分查找,版本1
public static int binarySearch1(int[] a, int value, int n)
{
int low, high, mid;
low = 0;
high = n-1;
while(low<=high)
{
mid = (low+high)/2;
if(a[mid] == value)
return mid;
if(a[mid]>value)
high = mid-1;
if(a[mid]<value)
low = mid+1;
}
return -1;
}
//二分查找,版本2,递归式
public static int binarySearch2(int[] a, int value, int low, int high)
{
int mid = (low+high)/2;
while(low<=high)
{
if(a[mid] == value)
return mid;
if(a[mid] > value)
return binarySearch2(a, value, low, mid-1);
if(a[mid] < value)
return binarySearch2(a, value, mid+1, low);
}
return -1;
}
//测试用例
public static void main(String[] args)
{
int[] a={0,1,2,3,4,5,6,7,8,9};
int len = a.length;
int x=2; // 需要查找的元素
int i = binarySearch2(a, x, 0, len-1);
if(i!=-1)
System.out.printf("元素 %d 在第 %d 个位置\n",x,i+1);
else
System.out.printf("没有找到元素:%d\n",x);
}
}
运行结果:
三、Python 程序实现
# -*- coding: utf-8 -*-
"""
Description: 二分查找算法
Author: shujuxiong
Version: 1.0
Date: 2018-06-28
"""
##二分查找,版本1
def binarySearch1(lists, value, n):
low = 0;
high = n-1;
while(low <= high):
mid = (low+high)//2
if(lists[mid] == value):
return mid;
if(lists[mid] > value):
high = mid-1
if(lists[mid] < value):
low = mid+1
return -1
##二分查找,版本2,递归式
def binarySearch2(lists, value, low, high):
mid = (low+high)//2
if(lists[mid] == value):
return mid;
if(lists[mid] > value):
return binarySearch2(lists, value, low, mid-1)
if(lists[mid] < value):
return binarySearch2(lists, value, mid+1, high)
return -1
##测序用例
def main():
mylist = [0,1,2,3,4,5,6,7,8,9]
N = len(mylist)
x = 2 #需要查找的元素
i = binarySearch2(mylist, x, 0, N-1)
if i != -1:
print("元素 %d 在第 %d 个位置\n" % (x,i+1))
else:
print("没有找到元素:%d\n" % x)
if __name__=='__main__':
main()
运行结果: