赞
踩
二分搜索是一种在有序数组中查找某一特定元素的搜索算法。
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
使用条件:
1、必须采用顺序存储结构。
2、必须按关键字大小有序排列。
public static void main(String[] args) { int[] num={1,2,3,3,4,5,7,8,11,18,22,22}; int n=5; int index=-1; int left=0; int right=num.length-1; int mid=(left+right)/2; while(left<=right) { if(num[mid]==n) { index=mid; break; // n大于中间元素,需要去右边找,查找范围变成 [mid+1, right] }else if(n>num[mid]) { left=mid+1; }else { right=mid-1; } mid=(left+right)/2; } if(index==-1) { System.out.println("你输入的数字不存在。"); }else { System.out.println("数字"+n+"存在,是第"+(index+1)+"个"); } }
package com.guo; public class Test { public static void main(String[] args) { int[] num={1,2,3,3,4,5,7,8,11,18,22,22}; int n=5; int index=binarySearch(num,0,num.length-1, n); if(index==-1) { System.out.println("你输入的数字不存在。"); }else { System.out.println("数字"+n+"存在,是第"+(index+1)+"个"); } } public static int binarySearch(int[] arr,int left, int right, int n) { if (right >= left) { int mid = left + (right - left) / 2; if (n == arr[mid]) { return mid; } if (n > arr[mid]) { return binarySearch(arr, mid + 1, right, n); } if (n < arr[mid]) { return binarySearch(arr, left, mid - 1, n); } } return -1; } }
def binarySearch(arr, n): left, right = 0, len(arr) - 1 while left<=right: mid = int(left + (right - left) / 2) if n==arr[mid]: return mid elif n>arr[mid]: left=mid+1 else: right=mid-1 else: return -1 # 测试数组 arr=[1,2,3,3,4,5,7,8,11,18,22,22] # 需要查找的元素 n=22 index = binarySearch(arr,n) if index == -1: print("元素不在数组中") else: print("{},在数组中的索引为:{},即第{}个".format(n, index, index+1))
# 返回 x 在 arr 中的索引,如果不存在返回 -1 # binarySearch(列表,上限,下限,需要查找的元素) def binarySearch(arr, left, right, x): # 基本判断 if right>= left: mid = int(left+ (right- left) / 2) # 元素整好的中间位置 if arr[mid] == x: return mid # 元素小于中间位置的元素,只需要再比较左边的元素 elif arr[mid] > x: return binarySearch(arr, left, mid - 1, x) # 元素大于中间位置的元素,只需要再比较右边的元素 else: return binarySearch(arr, mid + 1, right, x) else: # 不存在 return -1 # 测试数组 arr = [1, 2, 3, 3, 4, 5, 7, 8, 11, 18, 22, 22] #arr.sort() 对列表arr排序,另一种等价写法是:arr=sorted(arr) x = 11 # 函数调用 # 上限是0,下线是长度-1。代表对列表进行全局查找 result = binarySearch(arr, 0, len(arr) - 1, x) if result != -1: print("{}在数组中的索引为:{}".format(x,result)) else: print("元素不在数组中")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。