若是要实现查找到某一对象,就必须可以将一个对象与另外一个对象进行比较,故咱们须要对全部涉及的元素实现Comparable
接口,可是Comparable
接口中的compareTo
方法能够由咱们根据本身的需求进行重写。
这是Java API中的Comparable
接口,它存在于java.lang
包中。而最终对比的结果大于时返回正整数,等于时返回零,小于时返回负整数。html
静态方法:使用static
修饰符修饰方法,可使得在调用该方法时不用实例化方法。而静态方法和实例方法的区别主要体如今两个方面,一、在外部调用静态方法时,可使用"类名.方法名"的方式,也可使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法能够无需建立对象。二、静态方法在访问本类的成员时,只容许访问静态成员(即静态成员变量和静态方法),而不容许访问实例成员变量和实例方法;实例方法则无此限制。java
定义泛型方法:git
调用泛型方法:算法
线性查找法:一个很是简单的查找方式,从开头或结尾开始查找目标,将每一个元素的特征值与查找目标的特征值做比较,最终得出结果。可是在最坏的状况中会遍历整个列表才能查找到该元素。该方法不要求列表是否排序。他的图示以下:编程
二分查找法:从已排序列表的中间开始查找元素,若是没有找到则继续查找,由于列表已排序,故咱们就能够仅从列表的一边开始查找下一个元素,由于它一定位于列表的前半部分和后半部分,被咱们查找的那一部分被称为可行候选项,图示:数组
public static <T extends Comparable<T>> boolean binarySearch(T[] data, int min, int max, T target) { boolean found = false; int midpoint = (min + max) / 2; // determine the midpoint if (data[midpoint].compareTo(target) == 0) { found = true; } else if (data[midpoint].compareTo(target) > 0) { if (min <= midpoint - 1) { found = binarySearch(data, min, midpoint - 1, target); } } else if (midpoint + 1 <= max) { found = binarySearch(data, midpoint + 1, max, target); } return found; }
在binarySearch
方法中直接调用本身,以便实现二分查找。数据结构
基于效率的排序算法与查找相似一般分为两类:顺序查找和对数查找,顺序查找一般使用一对嵌套循环对n个元素排序,大约须要n2次比较,而对数查找大约须要nlog2n次比较。本章中主要涉及五中排序算法,其中顺序排序三种:选择排序、插入排序、冒泡排序,对数排序两种:快速排序、归并排序。学习
选择排序法:首先找出整个列表的最小值与该列表的第一个位置的值进行交换,第二轮扫描除了第一个位置之外的最小值与第二个位置的值进行交换,直至排序完成。图示:优化
插入排序法:先行比较前面两个元素,若有必要就交换顺序,以后扫描后面的元素,将后面的元素插入到前两个元素的应有位置,而且前两个元素也相应的移动。如此往复直至将最后一个元素插入到该有的位置,排序完成。图示:ui
冒泡排序法:从第一个元素开始扫描列表并比较相邻的两个元素,按照排序规定选择是否交换位置,直至将最大值“冒泡”至列表的尾端,至此完成一个元素的排序,第二再次扫描列表找到剩下的最大的元素,一路“冒泡”到倒数第二个位置。如此往复,直至排序完成。图示:
快速排序法:原理,选择一个关键值做为基准值。比基准值小的都在左边序列(通常是无序的),比基准值大的都在右边(通常是无序的)。通常选择序列的第一个元素。一次循环:从后往前比较,用基准值和最后一个值比较,若是比基准值小的交换位置,若是没有继续比较下一个,直到找到第一个比基准值小的值才交换。找到这个值以后,又从前日后开始比较,若是有比基准值大的,交换位置,若是没有继续比较下一个,直到找到第一个比基准值大的值才交换。直到从前日后的比较索引>从后往前比较的索引,结束第一次循环,此时,对于基准值来讲,左右两边就是有序的了。图示:
归并排序法:其算法是将多个有序数据表合并成一个有序数据表。若是参与合并的只有两个有序表,则成为二路合并。对于一个原始的待排序数列,每每能够经过分割的方法来归结为多路合并排序。图示:
各类排序算法的比较:
selectionSort
方法时,次数输出为零,如图:问题代码以下:
frequency
变量位置如图:修改后效果图以下:
错题一:
解析:书上原话,
Java集合API中含有索引列表的三种实现。
(本部分用于收集本章节后的生词)
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/5000 | 2/2 | 8/8 | 认真学习!积极向上 |
第二周 | 812/812 | 1/3 | 22/30 | |
第三周 | 814/1626 | 1/4 | 20/50 | |
第四周 | 1386/3012 | 2/6 | 20/70 | 愉快的国庆节就要结束了... |
第五周 | 1222/3234 | 1/7 | 30/100 |
计划学习时间:25小时
实际学习时间:30小时
改进状况:在博客中图文并茂,commit提交改进。