二分查找 - vb.net

Module Module1

Sub Main()
        Dim array(999) As Integer
        Dim searchValue As Integer
        Dim valueIndex As Integer
        Dim rnd As New Random()

For i As Integer = 0 To UBound(array)
            If (i = 0) Then
                array(i) = rnd.Next(10)
            Else
                array(i) = rnd.Next(array(i - 1), array(i - 1) + 10)
            End If
            Console.WriteLine("array(" & i & ")=" & array(i))
        Next i

Console.WriteLine(vbCrLf & "请输入一个1~100之间的整数:")
        searchValue = Console.ReadLine()

valueIndex = Find(array, searchValue)
        If (valueIndex <> -1) Then
            Console.WriteLine("查找成功!元素位于索引(" & valueIndex & ")处")
        Else
            Console.WriteLine("查找失败!")
        End If

Console.ReadKey()
    End Sub

Function Find(ByVal array() As Integer, ByVal searchValue As Integer) As Integer
        Dim result As Boolean
        Dim valueIndex As Integer
        Dim startIndex, endIndex As Integer

startIndex = 0
        endIndex = UBound(array)
        result = BinarySearch(array, searchValue, startIndex, endIndex, valueIndex)

Return IIf(result, valueIndex, -1)
    End Function

Function BinarySearch(ByVal array() As Integer, ByVal searchValue As Integer, ByRef startIndex As Integer, ByRef endIndex As Integer, ByRef valueIndex As Integer) As Boolean
        If (array Is Nothing Or array.Length = 0) Then
            Return False
        End If

Dim midIndex As Integer
        midIndex = Math.Ceiling((startIndex + endIndex) / 2)
        If (array(midIndex) = searchValue) Then
            valueIndex = midIndex
            Return True
        End If

If (array(midIndex) < searchValue) Then
            startIndex = midIndex + 1
            endIndex = endIndex
        Else
            startIndex = startIndex
            endIndex = midIndex - 1
        End If

Return BinarySearch(array, searchValue, startIndex, endIndex, valueIndex)
    End Function
End Module

时间: 2024-10-09 04:59:15

二分查找 - vb.net的相关文章

【bzoj4012】[HNOI2015]开店 动态树分治+二分查找

题目描述 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的想法当然非常好啦,但是她们也发现她们面临着一个问题,那就是店开在哪里,面向什么样的人群.很神奇的是,幻想乡的地图是一个树形结构,幻想乡一共有 n个地方,编号为 1 到 n,被 n-1 条带权的边连接起来.每个地方都住着一个妖怪,其中第 i 个地方的妖怪年龄是 x_i.妖怪都是些比较喜欢安静的家伙,所以它们并不希望和很多妖怪相邻.所以这个树所有顶点的

二分查找

递归版(在区间[x, y)中找v的位置) 1 //递归版二分查找 2 int bsearch(int * A, int x, int y, int v) 3 { 4 5 if(v<a[x] || v>a[y-1]) return -1; 6 int m = x + (y-x)/2; //此处能不能用int m = (x+y)/2,需要仔细考虑(暂时想不到原因) 7 if(A[m]==v) return m; 8 else if(A[m]>v) return bsearch(A, x, m

二分查找总结

最近刷leetcode和lintcode,做到二分查找的部分,发现其实这种类型的题目很有规律,题目大致的分为以下几类: 1.最基础的二分查找题目,在一个有序的数组当中查找某个数,如果找到,则返回这个数在数组中的下标,如果没有找到就返回-1或者是它将会被按顺序插入的位置.这种题目继续进阶一下就是在有序数组中查找元素的上下限.继续做可以求两个区间的交集. 2.旋转数组问题,就是将一个有序数组进行旋转,然后在数组中查找某个值,其中分为数组中有重复元素和没有重复元素两种情况. 3.在杨氏矩阵中利用二分查

二分查找JAVA实现

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功. 一.概念 二分查

rwkj 1430 二分查找

#include<iostream>using namespace std;int n,k,a[10000]; int binsearch(int low,int high){ int i,len,s;while(low<high) { len=(high+low)/2; for(s=0,i=0;i<n;i++) s+=a[i]/len; if(s>k) low=len+1; else if(s<k) high=len-1; else return len; }}int

uva:10487 - Closest Sums(二分查找)

题目:10487 - Closest Sums 题目大意:给出一组数据,再给出m个查询的数字.要求找到这组数据里的两个数据相加的和最靠近这个查询的数据,输出那两个数据的和. 解题思路:二分查找,这样找到的话,就输出查询的数值,但是要注意找不到的情况:这里最靠近的值不一定是在找不到的时刻的前一次数据,所以要维护最靠近的要查询数的数值. 代码: #include <stdio.h> #include <algorithm> #include <stdlib.h> using

php二分查找

<?php /** * 二分查找:查找一个值在数组中的位置 *@$val:查找的值 *@$arr:操作的数组,前提是按顺序排列 */ header("content-type:text/html;charset = utf-8"); function biary_search($arr,$val){ $num = count($arr); $low = 0; $high = $num - 1; while($low<$high){ $mid = floor(($high-$

二分查找算法的 JavaScript 实现

二分查找在查找[指定值]在[有序]数据中的[位置]时是一种高效的算法. 以下仅提供 ES5 版本. var arr = [0, 2, 4, 27, 28, 54, 67, 74, 75, 79, 86, 97, 289, 290, 678] function binarySearch(arr, val) { var start = 0, end = arr.length - 1; while (start <= end) { var mid = Math.floor((start + end)

深入浅出数据结构C语言版(12)——从二分查找到二叉树

在很多有关数据结构和算法的书籍或文章中,作者往往是介绍完了什么是树后就直入主题的谈什么是二叉树balabala的.但我今天决定不按这个套路来.我个人觉得,一个东西或者说一种技术存在总该有一定的道理,不是能解决某个问题,就是能改善解决某个问题的效率.如果能够先了解到存在的问题以及已存在的解决办法的不足,那么学习新的知识就更容易接受,也更容易理解. 万幸的是,二叉树的讲解是可以按照上述顺序来进行的.那么,今天在我们讨论二叉树之前,我们先来讨论一种情形.一种操作:假设现在有一个数组,数组中的数据按照某