美文网首页算法第四版习题讲解
算法练习(22):Java基础:引用,别名,二分法查找(1.2.

算法练习(22):Java基础:引用,别名,二分法查找(1.2.

作者: kyson老师 | 来源:发表于2017-09-17 13:32 被阅读173次

本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本人新建了一个微信群(算法交流),想要加入的,请添加我的微信号:zhujinhui207407 谢谢。另外,本人的个人博客 http://www.kyson.cn 也在不停的更新中,欢迎一起讨论

算法(第4版)

知识点

  • 引用
  • 别名
  • 非主流 二分法查找的实现

题目

1.2.8设 a[] 和 b[] 均为长数百万的整型数组。以下代码的作用是什么?有效吗?
int[] t = a; a = b; b = t;


1.2.8 Suppose that a[] and b[] are each integer arrays consisting of millions of integers. What does the follow code do? Is it reasonably efficient?
int[] t = a; a = b; b = t;
Answer. It swaps them. It could hardly be more efficient because it does so by copying references, so that it is not necessary to copy millions of elements.

答案

作用就是交换两个数组。
在JAVA 中,数组变量实际是数组的一个引用(类似于指针),交换两个引用的效率与数组大小无关,都是常数时间的。

题目

1.2.9 修改 BinarySearch(请见 1.1.10.1 节中的二分查找代码),使用 Counter 统计在有查找中被检查的键的总数并在查找全部结束后打印该值。
提示:在 main() 中创建一个 Counter 对象并将它作为参数传递给 rank()


1.2.9 Instrument BinarySearch(page47) to use a Counter to count the total number of keys examined during all searches and then print the total after all searches are com- plete. Hint : Create a Counter in main() and pass it as an argument to rank().

答案

Counter.java

public class Counter {

    
    public int counter;
    
}

BinarySearchCounter.java

public class BinarySearchCounter {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int[] numArray = { 1, 2, 3, 4, 67, 88, 89, 101, 222, 788, 999 };
        Counter counter = new Counter();
        int index = rank(222, numArray, counter);

        System.out.println("index: " + index + "\ncouter:" + counter.counter);
    }

    public static int rank(int t, int[] array, Counter counter) {

        int lo = 0;
        int hi = array.length - 1;
        int mid = (lo + hi) / 2;

        while (t != array[mid]) {
            counter.counter++;
            if (t < array[mid]) {

                if (hi == mid) {
                    return -1;
                }
                hi = mid;
            } else if (t > array[mid]) {
                if (lo == mid) {
                    return -1;
                }
                lo = mid;
            } else {
                return mid;
            }

            mid = (lo + hi) / 2;
        }

        return mid;
    }

}

代码索引

BinarySearchCounter.java

视频讲解

点此观看分析视频

广告

我的首款个人开发的APP壁纸宝贝上线了,欢迎大家下载。

本人所有简书的算法文章已经移入小专栏:算法四习题详解

相关文章

  • 算法练习(22):Java基础:引用,别名,二分法查找(1.2.

    本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本...

  • Swift的二分法查找实践

    Swift的二分法查找实践 在这篇教程中我们会使用计算机科学里一个基础的算法:二分法查找binary search...

  • 查找算法

    三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表

  • 刷前端面经笔记(九)

    1.JavaScript实现二分法查找? 二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找...

  • 算法图解1-2/11

    原书作者 Aditya Bhargava 1 算法简介 1.1 二分法查找 二分法查找,正是猜数字游戏的玩法:A...

  • 查找算法

    查找算法 顺序查找法 时间复杂度:O(n) 二分法查找 二分法查找适用于有顺序的序列 时间复杂度:O(n) 核心思...

  • Java 实现二分法查找算法

    Java 实现二分法查找算法 算法 假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.可...

  • 前端面试之算法二分法

    使用二分法的前提是,目标数组的元素必须是有序排列的,所以二分法属于有序查找算法 二分法又称为“折半查找”,从数组的...

  • 算法

    一.算法基础--算法的特性 二.算法基础--算法的复杂度 三.顺序查找和二分查找 顺序查找 二分查找(前提是有序的...

  • 二分法查找

    二分法查找 : 目的 : 查找一个数组中是否含义某个元素 : 有返回数组中的位置 ,没有返回 -1 算法: 二分法...

网友评论

    本文标题:算法练习(22):Java基础:引用,别名,二分法查找(1.2.

    本文链接:https://www.haomeiwen.com/subject/kvgpsxtx.html