肝了几万字,送给看了《算法图解》却是主攻Java的你和我(上篇) |
您所在的位置:网站首页 › 看完算法导论后的感想和收获是什么 › 肝了几万字,送给看了《算法图解》却是主攻Java的你和我(上篇) |
生活总是这样,不能叫人处处都满意,但我们还要热情的活下去。
地图
楔子第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 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方法: 选择排序的速度虽然没有快速排序这么快,但也是一种很灵巧的算法。如以下代码可通过选择排序实现:将数组元素按从小到大的顺序排列。 我们先编写一个用于找出数组中最小元素的方法: /** * 找出一个数组中最小的元素,并返回它的索引 * @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 |