Java中常用的查找方法——顺序查找和二分查找

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java中常用的查找算法——顺序查找和二分查找

一、顺序查找:

a)原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,

找不到便一直查找下去,直到数据最后一位。

b)图例说明:原始数据:int[] a={4,6,2,8,1,9,0,3};要查找数字:8

代码演示:

import java.util.Scanner;

/*

* 顺序查找

*/

public class SequelSearch {

public static void main(String[] arg) {

int[] a={4,6,2,8,1,9,0,3};

Scanner input=new Scanner(System.in);

System.out.println("请输入你要查找的数:");

//存放控制台输入的语句

int num=input.nextInt();

//调用searc()方法,将返回值保存在result中

int result=search(a, num);

if(result==-1){

System.out.println("你输入的数不存在与数组中。");

}

else

System.out.println("你输入的数字存在,在数组中的位置是第:"+(result+1)+"个");

}

public static int search(int[] a, int num) {

for(int i = 0; i < a.length; i++) {

if(a[i] == num){//如果数据存在

return i;//返回数据所在的下标,也就是位置

}

}

return -1;//不存在的话返回-1

}

}

运行截图:

二、二分查找

a)前提条件:已排序的数组中查找

b)二分查找的基本思想是:首先确定该查找区间的中间点位置:int mid = (low+upper)

/ 2;然后将待查找的值与中间点位置的值比较:若相等,则查找成功并返回此位

置。若中间点位置值大于待查值,则新的查找区间是中间点位置的左边区域。若中

间点位置值小于待查值,则新的查找区间是中间点位置的右边区域。下一次查找是

针对新的查找区间进行的。

c)图例说明:

原始数据:int[] a={5,3,6,1,9,8,2,4,7};查找是否存在数字8;

第一步,先用之前学过的排序方法将数组按升序排序:int[] a={1,2,3,4,5,6,7,8,9};

第二步,取中间数:5跟8比较,8大于5 ,取中间数右侧的数组进行比较,即{6,7,8,9}

第三步:重复第一步和第二步,直到找到数据或者比较完所有数据。

d)代码示例:

import java.util.Scanner;

/*

* 二分查找

*/

public class BinarySearch {

public static void main(String[] args) {

int[] arr={5,3,6,1,9,8,2,4,7};

//先打印输出原始数组数据

System.out.println("原始数组数据如下:");

for (int n : arr) {

System.out.print(n+" ");

}

System.out.println();

//首先对数组进行排序,这里用冒泡排序

for(int i=0;i

for(int j=0;j

if(arr[j]>arr[j+1]){

int temp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

//遍历输出排序好的数组

System.out.println("经过冒泡排序后的数组:");

for(int n:arr){

System.out.print(n+" ");

}

System.out.println();//换行

Scanner input=new Scanner(System.in);

System.out.println("请输入你要查找的数:");

int num=input.nextInt();

int result=binarySearch(arr, num);

if(result==-1){

System.out.println("你要查找的数不存在……");

}

else{

System.out.println("你要查找的数存在,在数组中的位置是:"+result);

}

}

//二分查找算法

public static int binarySearch(int[] arr,int num){

int low=0;//数组第一位数

int upper=arr.length-1;//数组最后一位数

while(low<=upper){//循环条件

int mid=(upper+low)/2;

if(arr[mid]

low=mid+1;

}

else if(arr[mid]>num){

upper=mid-1;

}

else

return mid;

}

return -1;

}

}

运行截图:

相关文档
最新文档