搜索

1、遍历

代码如下(示例):

//遍历1
import java.util.Scanner;
public class CircleTest {
	public static int search(int k,int[] a) {//遍历1
		int ret = -1;
		for(int i=0;i<a.length;i++)
		{
			if(a[i]==k) {
				ret = i;
				break;
			}
		}
		return ret;
	} 
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int[] a = new int [7];
		System.out.println("请输入7个数: ");
		for(int i=0;i<a.length;i++)
		{
			a[i]=in.nextInt();
		}
		System.out.println("请输入要查找的数字: ");
		int y = in.nextInt();
		int x = search(y,a);
		System.out.println("所查找的元素所在的位置下标为:");
		System.out.println(x);
}
}

//遍历2
import java.util.Scanner;
public class CircleTest {
	public static boolean search(int k,int[] a) {//遍历2
		boolean  ret = false;
		for(int h:a)
		{
			if(h==k) {
				ret = true;
				break;
			}
		}
		return ret;
	} 
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int[] a = new int [7];
		System.out.println("请输入7个数: ");
		for(int i=0;i<a.length;i++)
		{
			a[i]=in.nextInt();
		}
		System.out.println("请输入要查找的数字: ");
		int y = in.nextInt();
		boolean x = search(y,a);
		System.out.println("查找结果为:");
		System.out.println(x);
}
}

结果

//情况1
请输入7个数: 
5 2 0 1 3 1 4
请输入要查找的数字: 
1
所查找的元素所在的位置下标为:
3
//情况2
请输入7个数: 
1 9 2 8 7 3 6
请输入要查找的数字: 
6
查找结果为:
true

2、二分法

package pro2;
public class CircleTest {
	public static int search(int k,int[] a) {//二分法
		int ret = -1;
	    int l = 0;          //最左端
		int r = a.length;   //最右端
		while(l!=r) {       //数组不为1
			int m= ( l + r )/2;  //取中间值,/可能会比较靠左一点
			if( a[m]==k) {       //如果和中间值相等了,结束
				ret = m;
				break;
			}else if( a[m]>k ) { //在左半部分
				r = m-1;         //右端从中间往左移动一个单位
			}else {              //在右半部分         
				l = m+1;         //左端从中间往右移动一个单位
			}
		}
		if( a[l] == k)     //只有一个数的数组
			ret = l;
		return ret;
} 
	public static void main(String[] args) {
		int[] a = {1,3,5,7,9,11,12,13,14,16,17,18,21,22};
		System.out.println("查找18的位置:");
		System.out.println(search(18,a));
}
}

结果

查找18的位置:
11
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值