一、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()运行结果:
转载于:https://www.cnblogs.com/shujuxiong/p/9240082.html
