js 二分查找法之每日一更

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html"/>
        <meta name="keywords" content="二分查找算法" />
        <meta name="description" content="二分查找算法" />
        <meta name="author" content="KG" />
        <meta charset="utf-8">
        <title>二分查找算法</title>
    </head>
    <body>
        <!-- 二分查找算法是一种高效的搜索算法,是一种可以在有序数组中搜索到特定的元素的算法 -->
        <!-- 二分查找法一般有俩方法,使用递归或不使用递归 -->
        <script>
            // 进行二分查找法必须是排序好的数组
            var data=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
            var targetNum=8;
            let start=0,
            end=data.length-1,//因为是计算index值,数组中最大的index是数组长度减1
            midIndex;
            function findNum(start,end,targetNum){
                midIndex=Math.ceil((start+end)/2)

                // 获取数组的中间值
                if(targetNum==data[midIndex]){
                    return ‘查找到的目标是:‘+data[midIndex]+‘,‘+‘该目标在数组中的索引值是:‘+midIndex;
                }else if(targetNum>data[midIndex]){//此条件成立的话,说明,查找目标在数组的后半部分,所以应该改变查找的开始位置start的值
                    start=midIndex+1;//因为targetNum不等于数组中间位置的值,所以可以把开始位置往比中间位置往后移动一位,查找的结束位置不变;
                    return findNum(start,end,targetNum);//继续缩小范围搜索
                }else if(targetNum<data[midIndex]){//此条件成立的话,说明,查找目标在筛选范围的前半部分,应该改变查找位置的end的值
                    end=midIndex-1; //因为targetNum不等于搜索范围的中间值,所以把搜索范围的结束位置往前移动一位,查找的开始位置不变;
                    return findNum(start,end,targetNum);
                }else{
                    return ‘该目标在数组内查找不到!请重新输入‘;
                }
            }
            console.log(findNum(start,end,targetNum))
        </script>
    </body>
</html>

原文地址:https://www.cnblogs.com/nimon-hugo/p/12690802.html

时间: 2024-10-08 05:52:53

js 二分查找法之每日一更的相关文章

利用选择排序排序数组,用二分查找法查找

#include <stdio.h> #include <iostream> using namespace std; int main() { int a[] ={1,8,45,12,75,466,25,65,14,56,53}; int t; int length; length =sizeof(a)/sizeof(a[0]); for(int i=0;i<length;i++) { for(int j=i+1;j<length;j++) { if(a[i]>

基于二分查找法的数值区间查找

1.问题定义: 在有序数组中,查找在输入数组满足大于某值a,小于某值b的所有元素.其中a和b可以不在数组中. 2.举例描述: 输入数组eg:{2,7,8,11,16,26,31,33,37,40,45,49}.查找满足大于10小于30的所有数字,则输出的结果为{11,16,31}子集.若查找大于50或小于2则输出空集. 3.线性扫描方式: 复杂度O(n) 从左到右扫描满足条件的区间 4.二分查找方式: 复杂度O(logN)二分查找满足条件的区间,两次二分查找,确定子数组范围. auto bina

二分查找法

今年是大年初四,晚上闲的没事儿干,在手机上随手写了二分查找法,对有序数组或者循环有序数组都挺管用! public int binarySearch(int []nums,int key){ return binarySearch(nums,key,0,nums.length); } public int binarySearch(int []nums,int key,int left,int right){ int mid = (left + right) / 2; if(left <= rig

Java学习 (七)、数组,查找算法,二分查找法,冒泡排序,选择排序,插入排序

一.常用数组查找算法 工作原理:它又称为顺序查找,在一列给定的值中进行搜索,从一端的开始逐一检查每个元素,知道找到所需元素的过程. 例1:查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1 1 import java.util.Scanner; 2 public class LinearSearch{ 3 public static void main(String []argas) 4 { 5 int [] array={10,100,90,65,80,92}; 6 System.o

冒泡排序法与二分查找法

冒泡排序(Bubble Sort) 是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名. 算法原理 冒泡排序算法的运作如下:(从后往前) 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该

【C/C++学院】(3)二维数组/二分查找法/指针/模块注射

1.二维数组 二维数组可以当做一个一维数组, 每一个元素又是一个一维数组. #include <stdio.h> #include <stdlib.h> void main() { int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { printf("%d,%d,%d,%x,%x &

php 二分查找法算法详解

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

[c/c++] programming之路(15)、多维数组和二分查找法,小外挂

一.多维数组 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void main(){ 5 int num[3][4]; 6 int i,j; 7 for (i = 0; i < 3; i++) 8 { 9 for (j = 0; j < 4; j++) 10 { 11 num[i][j]=4*i+j+1; 12 printf("%-3d",num[i][j]); 13 } 14 printf("\

选择、冒泡排序,二分查找法以及一些for循环的灵活运用

import java.util.Arrays;//冒泡排序 public class Test { public static void main(String[] args) { int[] array = { 31, 22, 15, 77, 52, 32, 18, 25, 16, 7 }; // 冒泡 --> 两两比较 --> 提取出最大的数 在最后一位 //拿第一位和它后面的一位进行 两两比较 System.out.println(Arrays.toString(array)); fo