• 顺序查找算法加优化


    网上看了一部分代码,很多写的比较乱,代码也不全,现在整理了一下代码以便学习

    顺序查找算法比较简单,在一个线性表中,按照从前往后或者从后往前的顺序依次查找,如果查找到关键字和给定值相等,则返回给定值的位置,查找成功;如果查找值最后一个元素仍未找到,则查找失败。

    package find;
    
    import java.util.Scanner;
    
    public class shunxu {
        public static void main(String[] args) {
            int[] a={1,2,3,5,7,9,10,11,12,11};
            int n=a.length;
            System.out.println("请输入想要查找的数值:");
            Scanner sc=new Scanner(System.in);
            int key=sc.nextInt();
            int s=Sequential_Search(a,n,key);
            if(s==0){
                System.out.println("没有这个数据");
            }else{
                System.out.println("查到数据为第"+s+"个数");
            }
        }
        /*顺序查找,a为数组,n为要查找的数组长度,key为要查找的关键字*/
        private static int Sequential_Search(int a[],int n,int key)
        {
            int i;
            for(i=0;i<n;i++)
            {
                if(a[i]==key){
    
                    return i+1;
                }
            }
            return 0;
        }
    }

    有一种改进的算法,引入了哨兵的思想,所谓哨兵就是将关键字用一个数组位置去存储,保证在循环的过程中不必判断数组是否越界,因为执行到最后一个元素时,一定会跳出循环。在一定程度上优化了普通查找算法。

    package find;
    
    import java.util.Scanner;
    
    public class shunxu2 {
        public static void main(String[] args) {
            int[] a={1,2,3,5,7,9,10,11,12,11};
            int n=a.length;
            System.out.println("请输入想要查找的数值:");
            Scanner sc=new Scanner(System.in);
            int key=sc.nextInt();
            int s=Sequential_Search(a,n,key);
            if(s==0){
                System.out.println("没有这个数据");
            }else{
                System.out.println("查到数据为第"+s+"个数");
            }
        }
        /*有哨兵顺序查找*/
        private static int Sequential_Search(int a[],int n,int key)
        {
            int i;
            a[0]=key;//设置a[0]为关键字值,称为哨兵
            i=n-1;       //循环从数组尾部开始
            while (a[i]!=key){
                i--;
            }
            return i+1;
        }
    }
  • 相关阅读:
    RMQ Tarjan的Sparse-Table算法
    POJ3461一道kmp题,字符串Hash也可
    hdu3294 Manacher算法模板
    SQL复制数据表及表结构
    Delphi ResourceString的用法
    锐浪报表 Grid++Report 一维码无法固定条形码打印宽度
    Delphi中点击网页弹出的Alert对话框的确定按钮
    Delphi实现获取句柄并发送消息的方法(FindWindow、FindWindowEx、EnumChildWindows、SendMessage)
    Delphi 常用API 函数列表
    Delphi WinAPI 消息函数 SendMessage函数和 PostMessage的区别
  • 原文地址:https://www.cnblogs.com/almm/p/13274178.html
Copyright © 2020-2023  润新知