zoukankan      html  css  js  c++  java
  • 查找算法

            算法简介 : 指解题方案的准确而完整的描述,是一系列解决问题的清晰指令
            1.时间复杂度   T(n)=O(f(n))
            2.空间复杂度   S(n)=O(f(n))
            一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两方面衡量。
     
     

      查找算法和排序算法(下篇讲)是最基础也是最重要的两类算法,所以需要熟的掌握这两类算法,并能对这些算法的性能进行分析很重要,这两类算法中主要包括二分查找、快速排序、归并排序等。

      查找算法  

      1.顺序查找

      顺序查找又称线性查找。它的过程为:从查找数组的最后一个元素开始逐个与给定数比较,若某个记录的数和给定值比较相等,则查找成功;否则,一直查找到第一个数,若都不相等,则表明数组中没有该指定数,则查找失败。它的缺点就是效率低下

      实现如下:

    public class sequential { //顺序查找
        
        public static void main(String[] args) {
            int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // 给定的有序数组,顺序查找给定的data值
            int data = 3;
            sequentialSearch(arr, data);
        }
    
        private static void sequentialSearch(int[] arr, int data) {
            for (int i = arr.length - 1; i < arr.length; i--) {
                System.out.print(arr[i]);
                if (arr[i] == data) {
                    System.out.println();
                    System.out.println("通过顺序查找的到数的下标是:" + i);
                    System.out.println("对应的数date是:" + arr[i]);
                    return;
                }
            }
            System.out.println("没有查找到对应的data");
        }
    
    }

    -------------------------控制台输出
    9876543
    通过顺序查找的到数的下标是:2
    对应的数date是:3

      2.二分查找 

      二分查找又称折半查找,对于有序表来说,它的优点是比较次数少,查找速度快,平均性能好。

      二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x。

      二分查找的时间复杂度为O(logn)。

      实现如下:

    public class dichotomy { // 二分查找
        public static void main(String[] args) {
            int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //给定的有序数组,二分查找给定的data值
            int data = 3;
            int subscript = dichotomySearch(arr, data);
            if (subscript != -1) { //查找到返回查找的下标,查找不到返回-1
                System.out.println("通过二分查找的到数的下标是:" + subscript);
                System.out.println("对应的数date是:" + arr[subscript]);
            }else{
                System.out.println("没有查找到对应的data");
            }
        }
    
        private static int dichotomySearch(int[] arr, int data) {
            int start = 0;            // 索引开始
            int end = arr.length - 1; // 索引结束
            while (start <= end) {    
                int mid = (start + end) / 2; 
                if (data == arr[mid]) {
                    return mid;
                } else if (data < arr[mid]) { 
                    end = mid - 1;
                } else {
                    start = mid + 1;
                }
            }
            return -1;
        }
    }
  • 相关阅读:
    关于Application.Lock和Lock(obj)
    ViewState保存在服务器,可定时清空
    firefox选中flash会出现虚线框
    png for ie6背景透明
    用SQL Server Profiler看sql效率时,发现会隔几秒自动执行一些东西
    ServerXMLHTTP的setTimeouts超时设置
    asp.net 正则表达式过滤所有html标签
    .NET技术开发、VS2005快捷键大全
    在TOMCAT中使用JNDI连接数据源
    设计模式系列之Factory深入研究
  • 原文地址:https://www.cnblogs.com/zs-notes/p/9254874.html
Copyright © 2011-2022 走看看