第九章 排序与查找html
14.分块查找步骤:①先选取各块中的最大关键字构成一个索引表;②查找分两个部分:先对索引表进行二分查找或顺序查找,以肯定待查记录在哪一块中;而后,在已肯定的块中用顺序法进行查找。java
5.选择排序法:扫描整个列表找出最小值,将这个值与该列表第一处交换,再扫描剩下的列表找出最小值,将它与整个列表的第二处交换,以此类推。(代码须要用一个temp变量暂时存储最小值)git
9.归并排序法:经过将列表递归式分红两半直至每一子列表都只含有一个元素,而后将这些子列表按顺序重组。(如果奇数,则分解是后面比前面多一个。)算法
10.基数排序法:基于排序关键字(排序基于某个特定的值)的结构。(就是先建立基数的队列,而后把数放进相应的队列中,经过不断的遍历找到最后的位置)数组
11.基数:排序关键字的可能取值的个数(也就是每种排序关键字都会单首创建一个队列,最后的队列个数)。数据结构
问题1解决方案:函数
总结一下就是<T extends Comparable<? super T>>T的实例类型更多了,包括了父类。学习
问题2解决方案:1.先从数列中取出一个数做为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。测试
问题3:这行代码的意思是什么?做用是什么?.net
问题3解决方案:java.lang.Character.digit(char ch, int radix)方法,在指定的基数返回字符ch的数值。这行代码是为了确保所得到的这个数是在基数范围内。在书上的代码中,也就是为了确保数字是在0-9之间。
问题4解决方案:装填因子越大,越不容易产生冲突。装填因子 = 散列表元素个数/哈希表长度
问题1:明明data是泛型数组知足swap方法的形参形式,为何会红?
问题1解决方案:由于selectionSort方法用的是<T extends Comparable<? super T>>,保持统一swap方法也应该是<T extends Comparable<? super T>>。
1 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 2 System.out.println(df.format(new Date()));// new Date()为获取当前系统时间
(1)以毫秒为单位计算
static long currentTimeMillis() , 该方法返回值是从1970年1月1日凌晨到此时刻的毫秒数
1 long startTime=System.currentTimeMillis(); //获取开始时间 2 doSomeThing(); //测试的代码段 3 long endTime=System.currentTimeMillis(); //获取结束时间 4 System.out.println("程序运行时间: "+(end-start)+"ms");
(2)以纳秒为单位计算
1 long startTime=System.nanoTime(); //获取开始时间 2 doSomeThing(); //测试的代码段 3 long endTime=System.nanoTime(); //获取结束时间 4 System.out.println("程序运行时间: "+(end-start)+"ns");
问题3:列表已经排序好了,为何还有比较次数?并且次数还不相同?
问题3解决方案:须要进行比较,才能知道是否排序好了,不一样的排序方法,须要比较的次数不一样。
问题4:PP9.2所写的类形参是T[] data,在测试类中若是直接用int[],是不行的。
问题4解决方案:T[] 是针对对象而言的,因此若是想直接放入数字,那么须要用Integer[]来实现。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 2/2 | |
第二周 | 1010/1010 | 1/2 | 10/12 | |
第三周 | 651/1661 | 1/3 | 13/25 | |
第四周 | 2205/3866 | 1/4 | 15/40 | |
第五周 | 967/4833 | 2/6 | 22/62 |
计划学习时间:30小时
实际学习时间:22小时
改进状况:这周的内容是真的多。并且很是重要,虽然原理简单,可是代码实现起来仍是有必定难度的。