折半查找(java)(边学习边更新)

---恢复内容开始---

 1 class ArrayTest3
 2 {
 3     public static void main(String[] args)
 4     {
 5         //int [] arr=new int[]{54,45,6,5,34,656,34,2};
 6         //int index=GetIndex(arr,2);
 7         //System.out.println("index="+index);
 8
 9         int [] arr1=new int[]{2,4,5,7,12,34,35,46,67,89,99};
10         int index1=HalfSearch(arr1,34);
11         System.out.println("index1="+index1);
12         int index2=HalfSearch_2(arr1,34);
13         System.out.println("index2="+index2);
14     }
15     /*
16     折半查找的主要思想:
17     当所要查找的值(key)大于中间值(arr[mid]),则最小值的下标(min)变为中间值下标加1(mid+1),
18     如果所要查找的值小于中间值,则最大值的下标(max)变为中间值下标减1(mid-1),
19     查找到之后返回中值下标,否则返回-1。
20     */
21     //折半查找效率较高,但是前提是数组必须是有序的
22     public static int HalfSearch(int [] arr,int key)
23     {
24         int min=0,max=arr.length-1,mid;
25
26         while(min<max)//当最小的值的下标大于最大值就跳出循环,说明查找不到指定的值
27         {
28             mid=(min+max)/2;
29             if(key>arr[mid])
30                 min=mid+1;
31             else if(key<arr[mid])
32                 max=mid-1;
33             else
34                 return mid;
35         }
36         return -1;
37     }
38
39     //另一种折半排序的想法
40     public static int HalfSearch_2(int [] arr,int key)
41     {
42         int min=0,max=arr.length-1,mid;
43         mid=(min+max)/2;
44         while(arr[mid]!=key)//当中值不等于所指定的值,那就说明找不到(不存在)该值
45         {
46             mid=(min+max)/2;
47             if(key>arr[mid])
48                 min=mid+1;
49             else if(key<arr[mid])
50                 max=mid-1;
51             if(min>max)
52                 return -1;
53             mid=(min+max)/2;
54         }
55             return mid;
56     }
57
58
59
60     //寻找数组值为key第一次出现的位置
61     public static int GetIndex(int arr [],int key)
62     {
63         for(int i=0;i<arr.length;i++)
64         {
65             if(arr[i]==key)
66                 return i;
67         }
68         return -1;
69     }
70 }

---恢复内容结束---

时间: 2024-11-07 19:32:53

折半查找(java)(边学习边更新)的相关文章

JAVA native 学习 [持续更新]

最近查看ZipFile的源码,发现了native声明,学习一下,下面是整理的一些资料. java native方法及JNI实例 http://blog.csdn.net/xw13106209/article/details/6989415 JNI学习笔记(七)——异常处理 http://blog.csdn.net/ljeagle/article/details/6728930

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

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

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

利用Java实现折半查找 基本思路:while递归循环,不断判断a[middle]是否等于data,如果等于则跳出循环,返回索引值,如果不等,则进行二分处理,直至两者相等为止:其中通过count计数器记录查找次数,当count次数超过20次时视为元素不存在(此处有待优化) package test; /* * 二分法查找(折半查找) * TGmoving * */ public class halfSearch { public static int HalfSearch(int a[],int

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

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

java数据结构学习(一)之二分查找

  二分查找法与我们在孩童时期玩过的猜数的游戏一样,这个游戏里一个朋友会让你猜他正想的一个1至100的数,当你猜了一个数后,他会告诉你三种选择的一个:你猜的比她想的大,或小,或猜中了.为了能用最少的次数猜中,必须从50开始猜,如果她说你猜的太小,则推出那个数在51-100之间,所以下一次猜75((51+100)/2),如果她说有些大,那你就会在51-74之间才,下一次猜(51+74)/2=62.直到猜中她所给的数. 下面给出我们猜1-100的数,key为33的过程: 只需7次就可以猜中答案.下面

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]) ; } }

【算法数据结构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,

java 二分查找 - 折半查找算法

二分查找: 这个算法是比较简单的,容易理解的.这个算法是对有序的数组进行查找,所以想要使用这个算法那么 首先先要对数组进行排序. 其实有三个指针,开始指针,末尾指针,中间指针,来开始.折半查找. 步骤如下: 1.确定三个指针,start,end,middleIndex. 2.判断start<=end,如果满足,就执行这个方法,不满足,就返回,找不到. 3.在2的前提下,我们对其折半查找,middleIndex = start+end >> 1,取中间值. 4.判断中间位置的值和目标值是否