二分法检索(控制台输入一组数,找出关键字和最大值)
Posted silly-bird
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分法检索(控制台输入一组数,找出关键字和最大值)相关的知识,希望对你有一定的参考价值。
算法:二分法查找适用于数据量较大时,但是数据需要先排好顺序。主要思想是:(设查找的数组区间为array[low, high])
(1)确定该区间的中间位置K
(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]b.array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间将缩小一半,递归查找即可。时间复杂度为:O(log2n)。(来自:百度百科)
查找数组中的关键字
package learning; import java.util.Arrays; /** * 二分法查找 * @author Lee * */ public class TestTwo { public static void main(String[] args) { int[] arr=new int[] {1,9,4,7,5,59,47,29,25}; Arrays.sort(arr); System.out.println("排序后:"+Arrays.toString(arr)); System.out.println("目标元素的位置:"+binary(arr, /*例如查找7*/ 7)); } public static int binary(int[] arr,int value) { int head=0; int tail=arr.length-1; while(head<=tail) { int mid=(head+tail)/2; if(value==arr[mid]) { return mid; } if(value<arr[mid]) { tail=mid-1; } if(value>arr[mid]) { head=mid+1; } } return -1; } }
打印输出结果: 排序后:[1, 4, 5, 7, 9, 25, 29, 47, 59] 目标元素的位置:3
#########################################分隔符#############################################
控制台输入一组数,找出关键字和最大值
package learning; import java.util.Arrays; import java.util.Scanner; /** * 二分法查找 * @author Lee * */ public class TestTwo { public static void main(String[] args) { int[] arr=new int[10] ; for(int i=0;i<10;i++) { @SuppressWarnings("resource") Scanner input =new Scanner(System.in); System.out.println("please input 10 number:"); arr[i]=input.nextInt(); System.out.println("输入的数字为:"+Arrays.toString(arr)); } Arrays.sort(arr); System.out.println("排序后:"+Arrays.toString(arr)); int local=arr.length-1; int max=arr[local]; System.out.println("目标元素的位置:"+binary(arr, 25)); System.out.println(max); } public static int binary(int[] arr,int value) { int head=0; int tail=arr.length-1; while(head<=tail) { int mid=(head+tail)/2; if(value==arr[mid]) { return mid; } if(value<arr[mid]) { tail=mid-1; } if(value>arr[mid]) { head=mid+1; } } return -1; } }
打印输出结果:
please input 10 number:
11
输入的数字为:[11, 0, 0, 0, 0, 0, 0, 0, 0, 0]
please input 10 number:
22
输入的数字为:[11, 22, 0, 0, 0, 0, 0, 0, 0, 0]
please input 10 number:
33
输入的数字为:[11, 22, 33, 0, 0, 0, 0, 0, 0, 0]
please input 10 number:
25
输入的数字为:[11, 22, 33, 25, 0, 0, 0, 0, 0, 0]
please input 10 number:
55
输入的数字为:[11, 22, 33, 25, 55, 0, 0, 0, 0, 0]
please input 10 number:
77
输入的数字为:[11, 22, 33, 25, 55, 77, 0, 0, 0, 0]
please input 10 number:
44
输入的数字为:[11, 22, 33, 25, 55, 77, 44, 0, 0, 0]
please input 10 number:
99
输入的数字为:[11, 22, 33, 25, 55, 77, 44, 99, 0, 0]
please input 10 number:
88
输入的数字为:[11, 22, 33, 25, 55, 77, 44, 99, 88, 0]
please input 10 number:
100
输入的数字为:[11, 22, 33, 25, 55, 77, 44, 99, 88, 100]
排序后:[11, 22, 25, 33, 44, 55, 77, 88, 99, 100]
目标元素的位置:2
100
以上是关于二分法检索(控制台输入一组数,找出关键字和最大值)的主要内容,如果未能解决你的问题,请参考以下文章
编写程序读取一组正数,找出它们的最大数,然后计算该数的出现次数,输入是以 0结束。比如:输入 3 5 2 5 5 5 0,程序找出最大数是 5,它出现的次数是 4。