一维数组之二分查找

/**
     * @param args
     * @author wangxianpeng
     * 工作原理  :
     * 二分查找法 又称折半查找法 。将数组中间位置记录的关键字与查找的关键字进行比较,
     * 如果两者相等 则查找成功; 否则利用中间位置记录将数组分成前,后两个子数组
     * ,如果中间位置记录的关键字大于查找关键字,则进一步查找前面的子数组
     * ,否则 进一步查找后面的子数组。重复以上的过程,直到找到或找不到为止。
     *
     * 步骤:
     * 1. 创建数组  array并静态初始化。
     *
     * 2. 提示用户 属于要查找的数 number
     *
     * 3.声明开始下标start, 结束下标 end ,中间下标 middle并赋值   。
     *
     * 4.声明下标号 index  并赋值为-1;
     *
     * 5. 找出中间坐标的公式是  middle = (start + end) / 2。
     *
     * 6.if (number == array[middle]) 则把下 index = middle; break;
     *
     * 7.if(number > array[middle])   则 start = middle +1;
     *
     * 8.if(number < array{middle]) 则 end = middle -1;
     *
     * 采用while 循环 条件是 (start <= end )
     *
     * 输出结果  :如果index =-1 则没找到
     * 否则 输出下标
     */

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("轻输入一个数");
        int Number = input.nextInt();

int []array = {1,2,3,4,5,6,7,8,9};
            int start = 0;
            int end= array.length -1;
            int middel = 0;
            int index = -1;

while (start <= end){

middel = (start + end ) / 2;
            
                            if(Number == array[middel]){
                                 index = middel+1;
                                  break;
                               }
                   else if(Number > array[middel]){
                        start = middel + 1;
                    }
                 else {
                          end = middel - 1 ;
                  }
                  }
        
       if(array(Number) == -1){
            System.out.println("not find");
             }

else {
               System.out.println("find at "+ array(Number));
        }
   }

时间: 2024-10-12 01:32:14

一维数组之二分查找的相关文章

爪哇国新游记之二十七----数组的二分查找

代码: import java.util.ArrayList; import java.util.List; public class Bit { int max; int min; int[] arr; public Bit(int[] arrInput) { // 找出极值 for (int i = 0; i < arrInput.length; i++) { if (max < arrInput[i]) { max = arrInput[i]; } if (min > arrInp

二分查找 数组的二分查找

本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 1083: 数组的二分查找 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1646  Solved: 641[Submit][Status][Web Board] Description 在1500个整数中查整数x的位置,这些数已经从小到大排序了.若存在则输出其位置,若不存在则输出-1. Input 第一行,一个整数x 后面1500行,每行一个整数 Output 一个整数(表示x的位置,若

[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("\

旋转有序数组的二分查找

要求 给定一个没有重复元素的旋转数组(它对应的原数组是有序的),求给定元素在旋转数组内的下标(不存在的返回-1). 例子 有序数组{0,1,2,3,4,5,6,7}对应的旋转数组为{3,4,5,6,7,0,1,2}(左旋.右旋效果相同). 查找元素5,返回结果2: 查找元素8,返回结果-1. 分析 可以轻易地想到遍历一遍O(n)时间可以得到结果,但是并不是最好的结果:利用有序的特点,可以轻易的想到二分查找的方法.经过旋转后的数组总是可以分为两个有序序列,如下图所示.旋转数组分成了红蓝两段有序序列

有序数组的二分查找

二分查找的优点是比较次数少,查找速度快,但是在查找之前必须建立有序表.另外,二分查找只适用于顺序存储的有序表,而不适用于链接存储的有序表. 假设:给定一个按从小到大排序的数组P,对分查找某个元素的位置. 二分查找的过程为首先将x和数组的中间项进行比较,若x小于中间项的值,则在线性表的前半部分进行二分查找:若x大于中间项的值,则在线性表的后半部分进行二分查找:若x等于中间项的值,则查找结束.若待二分的子表长度为0时仍然没有找到这个元素,则说明数组中没有x. java代码 <span style=&qu

数组(二分查找)

数组 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给一个数组a[n],令s[i]为数组a中比a[i]大的数的个数.求数组s. Input: 输入包含多组测试数据,对于每组数据,输入一个整数n(1<=n<=10^5),接下来有n个整数a[i](0<=a[i]<=10^9);保证输入的a[i]全部不同. Output: 对于每组数据,输出数组s. Sample Input: 5 3 4 5 1 2 10 11 4

【二分查找】无重复数组的二分查找(非递归版本)

// 二分查找法 #include <iostream> #include <vector> using namespace std; int BinarySearch(vector<int> vec,int target) { // 特殊输入 if(vec.size() <= 0) return -1; // 二分查找(非递归) int low = 0; int mid = 0; int high = vec.size()-1; // 注意:取等号 while(

旋转数组的二分查找

问题描述:已知有序数组a[N], 从中间某个位置k(k未知,k=-1表示整个数组有序)分开,然后将前后两部分互换,得到新的数组,在该新数组的查找元素x.如:a[]={1,2,5,7,9,10,15},从k=4分开,得到新数组a={9,10,15, 1,2,5,7}. 1 #include "stdafx.h" 2 3 int search(int *a, int key, int low, int high) 4 { 5 if (low > high) 6 return -1;

leetcode:Search a 2D Matrix(数组,二分查找)

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers in each row are sorted from left to right. The first integer of each row is greater than the last integer of the previous ro