循序与二元搜索算法-java

循序搜索法

  就是一个一个去比较,找到时返回;

二元搜索法

  二元搜索算法是在排好序的数组中找到特定的元素.

  首先, 比较数组中间的元素,如果相同,则返回此元素的指针,表示找到了. 如果不相同, 此函数就会继续搜索其中大小相符的一半,然后继续下去. 如果剩下的数组长度为0,

  则表示找不到,那么函数就会结束.

实现代码:

package com.zc.manythread;

import java.util.Random;
import java.util.Scanner;
/**
 *
 * @author 偶my耶
 *    循环查找
 *    二元查找
 */
public class LinearSearch {
    //循序搜索
    public static int LinearSearch(int[] list,int item)
    {
        for(int i = 0 ; i < list.length;i++)
        {
            if(list[i]==item)
                return i;//找到传回的位置
        }
        return -1;//找不到时
    }
    //二元搜寻,传入的数先排序好,由小至大
    public static int BinarySearch(int[] list,int item)
    {
        //初始左右二边
        int left = 0 ;
        int right = list.length;

        //左边的索引位置小于右边的索引的位置
        while(left<=right)
        {
            int mid = (left + right)/2;
            if(list[mid]==item)
                return mid;
            else
            {
                //所查询值比中间值小,故值会在中间的左边数列
                if(list[mid]>item)
                {
                    right = mid -1;
                }else
                {
                    left = mid +1;
                }
            }
        }
        return -1;//找不到时
    }
    /**
     * 产生随机数组
     * @param count
     * @return
     */
    private static int[]  createDate(int count) {
        int[] data=new int[count];
          Random rand = new Random();
          boolean[] bool = new boolean[100];
          int num = 0;
          for (int i = 0; i < count; i++) {
           do {
            // 如果产生的数相同继续循环
            num = rand.nextInt(100);
           } while (bool[num]);
           bool[num] = true;

           data[i]=num;
          }
          return data;
    }
    public static void main(String args[])
    {
        //输入要查找的数
        Scanner in = new Scanner(System.in);

        //循序搜寻案列
        int[] list = createDate(10);

        System.out.println("原始数列:");
        for(int i = 0 ; i <list.length ; i ++)
        {
            System.out.print(list[i]+" ");
        }

        System.out.println("\r\n请输入要查询的数:");
        int searchkey = in.nextInt();

        int ans =  LinearSearch(list,searchkey);
        if(ans>-1)
        {
            System.out.println("找到数,位置在:"+(ans+1)+"位");
        }
        else
            System.out.println("找不着");

        //二元搜寻案列
        int[] list2 = {2,4,6,8,10,12,13,14,15,16};

        System.out.println("原始数据:");
        for(int i = 0 ; i<list2.length ; i ++)
        {
            System.out.print(list2[i]+" ");
        }

        System.out.println("\r\n请输入要查询的数:");
        int searchkey2 = in.nextInt();

        int ans2 =  BinarySearch(list2,searchkey2);
        if(ans2>-1)
        {
            System.out.println("找到数,位置在:"+ans2+"位");
        }
        else
            System.out.println("找不着!");

    }
}

 运行结果

时间: 2024-10-14 00:51:12

循序与二元搜索算法-java的相关文章

java 静态资源,非静态资源,父类子类,构造方法之间的初始化循序

java面试经常被问静态资源,非静态资源,父类子类,构造方法之间的执行顺序.下面添加两个类做个测试 class Parent { // 静态变量 public static String p_StaticField = "父类--静态变量"; // 变量(其实这用对象更好能体同这一点,如专门写一个类的实例) //如果这个变量放在初始化块的后面,是会报错的,因为你根本没有被初始化 public String p_Field = "父类--变量"; // 静态初始化块

ASP.NET执行循序

首先第一次运行一个应用程序(WebSite或者WebApplication都是Web应用程序)第一次请求 -> 1,IIS -> 2,aspnet_isapi(非托管dll) -> 3,HttpRuntime(到这里已经是托管的了)HttpRuntime中只有一个方法ProcessRequest 这个方法是整个应用程序的入口点 HttpContext就是在这个方法里面构建的 出了这个方法后HttpContext就构建完成了 -> 4,执行HttpApplication类的Start

推荐系统的循序进阶读物(从入门到精通)

转载一篇文章,作为记录,有时间去看一遍- 为了方便大家从理论到实践,从入门到精通,循序渐进系统地理解和掌握推荐系统相关知识.特做了个读物清单.大家可以按此表阅读,也欢迎提出意见和指出未标明的经典文献以丰富各学科需求(为避免初学者疲于奔命,每个方向只推荐几篇经典文献).1. 中文综述(了解概念-入门篇)a) 个性化推荐系统的研究进展b) 个性化推荐系统评价方法综述2. 英文综述(了解概念-进阶篇)a) 2004ACMTois-Evaluating collaborative filtering r

循序渐近学docker---笔记

1.安装docker 环境:ubuntu 16.04 sudo apt-get install docker.io [email protected]:~# docker -vDocker version 1.12.1, build 23cf638但是我这里,安装后,无法启动,切换到root下,才正常运行 切换root,[email protected]:~$ sudo su - 2.体验docker--个人博客WordPress的搭建 #docker run --name db --env M

sql执行循序

(8) select (9) distinct (11) top 1 (6) Table1.id,COUNT(Table1.name) as nameCount (1) from Table1 (3) inner join Table2 (2) on Table1.id=Table2.id (4) where Table1.id<4 (5) group by Table1.id (7) having Table1.id<3 (10) order by Table1.id desc 序号给出了执

for循环的执行循序

先上一段代码,大家说出此方法的执行结果: public class Print{ static boolean out(char c){ System.out.println(c); return true; } public static void main(String[] argv){ int i = 0; for(out('A');out('B') && (i<2);out('C')){ i++; out('D'); } } } 答案不说了,直接说解题思路吧 for循环的执行

java 经典算法(转)

1.河内之塔.. 2.Algorithm Gossip: 费式数列. 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官(一) 6.Algorithm Gossip: 老鼠走迷官(二) 7.Algorithm Gossip: 骑士走棋盘 8.Algorithm Gossip: 八皇后 9.Algorithm Gossip: 八枚银币. 10.Algorithm Gossip: 生命游戏. 11.Algorithm Gossip:

使用Java理解程序逻辑错题

此题考查java带参方法的定义及调用.java方法的参数可以任意类型.任意个,返回值不限,返回的类型必须一致,形参和实参的类型必须一致. 因此此题正确答案为D 试题分析 创建一个对象的语法为: 类名 对象名=new 类名();,因此正确答案为BD A.数组下标是从"0"开始,记住这点. B.数组元素类型一定要相同,做作业时候就知道了. C.做作业时候就知道了 D.是length,没有括号 本题考查的是对"=="运算符的理解."=="用于比较两个对

Thinking in Java:容器深入研究

1.虚线框表示Abstract类,图中大量的类的名字都是以Abstract开头的,它们仅仅是部分实现了特定接口的工具,因此创建时能够选择从Abstract继承. Collections中的实用方法:挑几个经常使用的: 1. reverse(List):逆转次序 2. rotate(List,int distance)全部元素向后移动distance个位置,将末尾元素循环到前面来(用了三次reverse) 3.sort(List,Comparator) 排序,可依照自己的Comparator 4.