[java]在一堆无序的数据中寻找数据
问题描述
用java编写程序,判断用户输入的一个整数是否在已知的数组中。
解题思路
1.利用算法对无序数组排序;
2.利用折半算法查找;
代码示例
import java.util.Scanner;
public class Example2_5 {
/**
*该程序解决的问题
* 折半查找法
* 利用折半查找判断某数据是否存在数组中
* */
/**
* 选择法排序数组
* */
public static void chooseSort(int []array) {
for(int i=0;i<array.length;i++) {
for(int j=i+1;j<array.length;j++) {
if(array[j]<array[i]) {
int t=array[j];
array[j]=array[i];
array[i]=t;
}
}
}
}
/**
* 二分查找算法(迭代)
**/
public static int binarySearch(int []array,int target) {
int start=0;//查找范围起点
int end=array.length-1;//查找范围终点
int mid;//查找范围中位数
while(start<=end) {
mid=(start+end)/2;
if(array[mid]==target) {
return mid;
}else if(array[mid]<target) {
start=mid+1;
}else if(array[mid]>target) {
end=mid-1;
}
}
return -1;
}
/**
* 主函数入口
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]= {12,45,67,89,123,-45,67};
/**
* 启用选择排序
* */
chooseSort(a);
/**
* 从键盘输入一个整数
* */
Scanner reader =new Scanner(System.in);
System.out.println("请输入一个整数");
int target=reader.nextInt();
/**
* 启用二分查找
* */
int flag = binarySearch(a,target);
if(flag!=-1) {
System.out.println("查找的数对应数组元素为"+"a["+flag+"]="+a[flag]);
}else {
System.out.println("没有在数组中查找到对应的元素");
}
}
}
运行示例
注意我这里使用的数组已经在代码里分配了元素,int a[]= {12,45,67,89,123,-45,67};
反思
以上的代码仅仅适用于在一堆相同数据类型、无序然后没有重复元素的数据中,所以使用存在局限性。
例如,如果我这里使用的数组已经在代码里分配了元素,int a[]= {12,45,12,67,89,123,-45,67};
运行之后,输入整数12,它只会表明查找到对应元素a[0]=12,而不会说还查找到a[2]=12。这是代码后期需要改进的地方。