用Java语言编写对整型数组进行二分查找的程序。
3个回答
展开全部
public class BinarySearchDemo {
public static void main(String[] args) {
int[] a = new int[]{1,5,7,9,11,18,23,48,69};
int point = new BinarySearchDemo().binarySearch(a, 23);
if(point == -1)
System.out.println("在数组中未查找到数23");
else
System.out.println("数字23是数组中第 " + (point + 1) + " 位数");
}
/**
* 二分法查找一个整数在整型数组中的位置
*
* 算法思路:首先得到数组a的最小值和最大值的下标,分别是:low和high,接着求出值位于数组中间那个数的下标middle
* 然后再将这个middle对应的数组中的数和待查找的数num进行比较,如果相等,则表示已查找到,如果num < a[middle]
* 则说明num位于a[low]和a[middle]之间,于是将a[middle - 1]设为较大值,继续求出此时对应的a[middle],
* 再进行比较,其他情况可依次类推。一直到low=high,如果此时还没有在数组a中查找到,则说明该数组a中没有值num,返回-1
*
* @param a 给定的整型数组
* @param num 待查找的数 num
*
* @return 返回整数num在数组a中的位置下标,如果未查找到则返回-1
* */
public int binarySearch(int[] a,int num){
int low = 0;
int high = a.length - 1;
while(low <= high){
int middle = (low + high) / 2;
if(num == a[middle])
return middle;
else if(num < a[middle])
high = middle - 1;
else
low = middle + 1;
}
return -1;
}
}
程序基本上就是这样了,其中注释中有详细的解释说明
public static void main(String[] args) {
int[] a = new int[]{1,5,7,9,11,18,23,48,69};
int point = new BinarySearchDemo().binarySearch(a, 23);
if(point == -1)
System.out.println("在数组中未查找到数23");
else
System.out.println("数字23是数组中第 " + (point + 1) + " 位数");
}
/**
* 二分法查找一个整数在整型数组中的位置
*
* 算法思路:首先得到数组a的最小值和最大值的下标,分别是:low和high,接着求出值位于数组中间那个数的下标middle
* 然后再将这个middle对应的数组中的数和待查找的数num进行比较,如果相等,则表示已查找到,如果num < a[middle]
* 则说明num位于a[low]和a[middle]之间,于是将a[middle - 1]设为较大值,继续求出此时对应的a[middle],
* 再进行比较,其他情况可依次类推。一直到low=high,如果此时还没有在数组a中查找到,则说明该数组a中没有值num,返回-1
*
* @param a 给定的整型数组
* @param num 待查找的数 num
*
* @return 返回整数num在数组a中的位置下标,如果未查找到则返回-1
* */
public int binarySearch(int[] a,int num){
int low = 0;
int high = a.length - 1;
while(low <= high){
int middle = (low + high) / 2;
if(num == a[middle])
return middle;
else if(num < a[middle])
high = middle - 1;
else
low = middle + 1;
}
return -1;
}
}
程序基本上就是这样了,其中注释中有详细的解释说明
展开全部
二分查找要求数组事先排好序
import java.util.*;
public class MyBinary {
public static void main(String args[]) {
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int key;// 声明要查找的数据
Scanner in = new Scanner(System.in);// 声明Scanner对象,可由键盘输入数据
System.out.print("数组为:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
System.out.println("请输入你要查找的数据:");
key = in.nextInt();// 获得由键盘输入的数据
int i = new MyBinary().search(array, key);
if (i == -1) {
System.out.println("没有找到" + key + "!");
} else {
System.out.println("找到,下标为" + i);
}
}
public int search(int[] number, int key) {
int left = 0;
int right = number.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (number[mid] < key)
left = mid + 1;
else if (number[mid] > key)
right = mid - 1;
else
return mid;
}
return -1;
}
}
import java.util.*;
public class MyBinary {
public static void main(String args[]) {
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int key;// 声明要查找的数据
Scanner in = new Scanner(System.in);// 声明Scanner对象,可由键盘输入数据
System.out.print("数组为:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
System.out.println("请输入你要查找的数据:");
key = in.nextInt();// 获得由键盘输入的数据
int i = new MyBinary().search(array, key);
if (i == -1) {
System.out.println("没有找到" + key + "!");
} else {
System.out.println("找到,下标为" + i);
}
}
public int search(int[] number, int key) {
int left = 0;
int right = number.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (number[mid] < key)
left = mid + 1;
else if (number[mid] > key)
right = mid - 1;
else
return mid;
}
return -1;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用Arrays的静态方法binariSearch方法就行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询