Java实现折半查找(二分法)

利用Java实现折半查找

基本思路:while递归循环,不断判断a[middle]是否等于data,如果等于则跳出循环,返回索引值,如果不等,则进行二分处理,直至两者相等为止;其中通过count计数器记录查找次数,当count次数超过20次时视为元素不存在(此处有待优化)

package test;
/*
 * 二分法查找(折半查找)
 * TGmoving
 * */
public class halfSearch {

    public static int HalfSearch(int a[],int data){

        int length = a.length;
        int start = 0;
        int end = length - 1;
        int middle = (start + end) / 2;
        int count = 1; //用于计数,折半查找次数超过20次仍未找到视为不存在该元素

        while(data!=a[middle]){
            if(start > end || count > 20){
                return -1;
            }else{
                if(data < a[middle]){
                    end = middle;
                    middle = (start + end) / 2;
                    System.out.println("第"+(count+1)+"次查找 data < a[middle]: "+ "索引为:"+middle);
                }else if(data > a[middle]){
                    start = middle + 1;
                    middle = (start + end ) / 2;
                    System.out.println("第"+(count+1)+"次查找 data > a[middle]: "+ "索引为:"+middle);
                }
            }
            count++;
        }
        count = 0;
        return middle;
    }

    public static void main(String[]Args){

        int a[] = {1,2,3,4,5,6,7};
        int index = HalfSearch(a, 7);
        System.out.println("isExist:"+ index );

    }
}

运行结果展示:

时间: 2024-11-06 12:32:40

Java实现折半查找(二分法)的相关文章

java之折半查找

//功能:二分查找import java.util.*; public class Demo1 {    public static void main(String[] args) {      int arr[]={2,5,7,12,25};//定义arr数组并赋值      System.out.print("请输入你需要查找的数:");      Scanner sr=new Scanner(System.in);      int a=sr.nextInt();      B

c - 折半查找(二分法检索)

1 #include <stdio.h> 2 3 #define LEN 10 4 5 /* 6 折半查找(二分法检索). 7 */ 8 9 int 10 index_of(int *a, int k) { 11 int l = 0; 12 int r = LEN -1; 13 int m; 14 while(l <= r) { 15 m = (r + l) >> 1; //右移(即除以2). 16 if(k == a[m]) 17 return m; //找到,则直接返回下

数组折半查找(二分法)方法

//折半查找(二分法)public void arrayHalfQuery() {    //定义一个数组,类型为int整型数据类型    int[] num = {1,3,4,7,9,10,12,15,17,19,21,22,25,26,28,29,30};    //定义一个要查找的key值    int key = 18;    //取出数组中最大值下标和最小值下标    int min = 0;    int max = num.length-1;    //调用死循环    while

二分法查找(折半查找)

顺序查找并没有对表中的关键字域的顺序做出任何假设,与顺序查找不同,在折半查找中,表中的记录是按关键字域有序排列的,其比较会出现下面三种结果: searchumn< list[middle].key,此时,无需考虑位于list[middle]和list[n-1]之间的记录,而继续查找位于list[0]和list[middle-1]间的记录. searchnum=list[middle].key,此时,查找成功,结束查找. searchnum>list[middle].key,此时,无需考虑位于l

Java 实现二分查找\折半查找

二分查找又称折半查找,优点是比较次数少,查找速度快:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表. 该算法要求: 1.  必须采用顺序存储结构. 2.  必须按关键字大小有序排列. 该算法时间复杂度最坏为:O(logn) 注意点有mid.low.high 其Java实现代码如下(该代码有缺陷,只是基本实现,有待完善): public class BinarySearch { /** * @param args */ public static

Java习题(选择,冒泡排序,折半查找)

解决问题如下: 1.求1+2!+3!+...+20!的和. 2.获取数组中的最大和最小值. 3.对数组进行选择排序.冒泡排序. 4.在数组中查找某个数的位置(折半查找). 折半查找:      适合顺序表的查找,数组中存的是按顺序排列的元素,方法如下:定义变量low,mid,high分别指向数组中的最低位,中间和最高位的元素:比较要查找的元素和mid指向的元素,如果比mid大,则在mid和high之间继续查找,low=mid+1; 否则在low和mid之间继续查找,high=mid-1.直到lo

01. Java的经典排序--选择排序--冒泡排序--折半查找(二分查找)

Java的经典排序--选择排序--冒泡排序--折半查找 选择排序 选择排序 3 2 1 5 8 0 1 3 2 5 8 1 1 2 3 5 8 2 1 2 3 5 8 3 1 2 3 5 8 public static void main(String[] args) { int[] arr={3,2,1,5,8}; selectSort(arr); for(int i = 0 ; i < arr.length ; i ++){ System.out.println(arr[i]) ; } }

查找之二折半查找(二分法查找)和插值查找

一.折半查找的前提是线性表中的记录必须好似关键码有序,线性表必须是顺序存储的. 二.折半查找 1 public class Binary_SearchDemo01 { 2 static int[] num = {0,1,3,5}; 3 public static void main(String[] args) { 4 int key = 3; 5 int x = Sequential_Search(key); 6 System.out.println(num[x]); 7 } 8 privat

【算法数据结构Java实现】折半查找

1.背景 以一个题目为例,一个整数x是一组按大小顺序排列好的数列中的一个数,我们要找到x在数列中的索引位置. 比如按从小到大排列的数列: -3,-2,0,4,5,7,12,64 我们要找到数字7的位置,如果是线性查找,时间复杂度是O(n),如果用折半查找的话,时间复杂度是O(log(n)),因为每次折半,计算量少一半,所以取对数. 2.代码 package Algorithm_analysis; public class Bisearch { static int[] array={-3,-2,