肝了几万字,送给看了《算法图解》却是主攻Java的你和我(上篇)

您所在的位置:网站首页 看完算法导论后的感想和收获是什么 肝了几万字,送给看了《算法图解》却是主攻Java的你和我(上篇)

肝了几万字,送给看了《算法图解》却是主攻Java的你和我(上篇)

2024-07-17 15:30| 来源: 网络整理| 查看: 265

生活总是这样,不能叫人处处都满意,但我们还要热情的活下去。

地图 楔子第1章 算法简介1.2 二分查找 第2章 选择排序2.3 选择排序 第3章 递归第4章 快速排序4.1 分而治之4.2 快速排序 第5章 散列表5.1 散列函数5.2 应用案例5.2.1 将散列表用于查找5.2.2 防止重复5.2.3 将散列表用作缓存5.2.4 小结 第6章 广度优先搜索6.4 实现图6.5 实现算法

楔子

最近看了下《算法图解》这本书,写的确实通俗易懂、生动有趣,很适合算法入门(作者快打钱 !!!)。如果有需要的话,本博主也贴心的准备了这本书的电子版,通过下图下方的百度网盘链接就可下载哦!

在这里插入图片描述

链接:https://pan.baidu.com/s/1ubClKcrgOTqqfS7BXJrB8Q 提取码:sywh

但可惜书中示例都是用Python代码实现的,虽然狠狠的感受了一把Python的简洁和优雅之处,但是对于主攻Java语言的程序员包括我有点不太友好。为此,我特意将书中的Python代码翻译成了Java代码,希望对大家能有帮助。

因此本篇博客结合《算法图解》一书食用更佳!当然,本博主并不是简单粗暴的直接翻译,而是辅以必要的讲解,所以没有看过《算法图解》一书也可放心食用。

第1章 算法简介 1.2 二分查找

二分查找很像我们之前酒桌喝酒玩的猜数字的游戏。当时我们为了增加游戏的激烈程度,往往猜的数字都是直接对半砍。

方法binary_search用于接收一个有序数组和一个元素。如果指定的元素包含在数组中,这个方法将返回其位置。你将跟踪要在其中查找的数组部分——开始时为整个数组。

int low = 0; int high = array.length - 1;

在这里插入图片描述

你每次都检查中间的元素:

// 整数除法,如果(low + high)不是偶数,Java自动将mid向下取整 int mid = (low + high) /2; // (0+3)/2 = 1(1.5向下取整) int guess = array[mid];

如果猜的数字小了,就相应的修改low值:

if (guess item) high = mid - 1;

在这里插入图片描述 完整的代码示例如下:

/** * 用二分查找判断一个数是否存在一个数组里 * @param array 数组 * @param item 需要判断数组中是否存在的一个指定元素 * @return */ private static int binary_search(int[] array, int item) { //需要查找的最小范围 - 数组索引从0开始 int low = 0 ; // 需要查找的最大范围 - 数组长度-1 int high = array.length - 1; while (low item) // 猜的数字大了 high = mid - 1; // 不要使用 middle-- else // 猜的数字小了 low = mid + 1; // 不要使用 middle++ } return -1; // 返回-1表示没有指定的元素 }

先写一个方便显示二分查找结果的方法:

/** * 根据二分查找的结果打印出相应的内容 * @param array 用于查找的数组 * @param index 二分查找返回的索引 * @param item 查找的元素 */ private static void printResult(int[] array, int index, int item) { if (index == -1) System.out.println("很抱歉,数组 "+ Arrays.toString(array) +" 中没有 " + item + " 这个元素"); else System.out.println("数组 "+ Arrays.toString(array) +" 中存在 " + item + " 这个元素,它的索引为:" + index); }

来测试一下吧:

public static void main(String[] args) { // 声明一个数组 int[] array = {1, 3, 5, 7, 9}; System.out.println("================================================="); // 需要查找的元素 int item = 7; // 进行二分查找并返回相应的结果 int index = binary_search(array, item); // 根据二分查找的结果打印出相应的内容 printResult(array, index, item); // 需要查找的元素 int item1 = -1; // 进行二分查找并返回相应的结果 int index1 = binary_search(array, item1); // 根据二分查找的结果打印出相应的内容 printResult(array, index1, item1); System.out.println("================================================="); }

运行main方法: 在这里插入图片描述 完美!!!

第2章 选择排序 2.3 选择排序

选择排序的速度虽然没有快速排序这么快,但也是一种很灵巧的算法。如以下代码可通过选择排序实现:将数组元素按从小到大的顺序排列。 我们先编写一个用于找出数组中最小元素的方法:

/** * 找出一个数组中最小的元素,并返回它的索引 * @param arr * @return */ private static int findSmallest(int[] arr) { // 最小元素的值,默认第一个元素为最小的元素 int smallest = arr[0]; // 最小元素的索引,默认第一个元素为最小的元素 int smallestIndex = 0; // 遍历数组 - 因为默认第一个元素为最小元素,所以从1开始 for (int i = 1; i


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3