本周学习了第六章排序与查找php
public static <T extends Comparable<T>> boolean linearSearch (T[] data, int min, int max, T target)
public static <T extends Comparable<? super T>> void selectionSort (T[] data)
之中<? super T>表示的是什么意思排序方法 | 时间复杂度 |
---|---|
选择排序 | O(n^2) |
插入排序 | O(n^2) |
冒泡排序 | O(n^2) |
快速排序 | O(n*log2n) |
归并排序 | O(nlog2n) |
基数排序 | O(n) |
三种顺序排序方法都使用了内外两层循环进行排序操做,因此时间复杂度都为nxn-->O(n^2);
快速排序和归并排序两种对数排序在排序中采起了递归的方法,所以在元素比较中只用到了大约nlog2n次比较,时间复杂度为O(log2n);还有一种特殊的基数排序,由于在排序过程当中不涉及到元素之间的比较,只须要将元素在队列之间进行移动操做,操做时只用遍历数据便可,所以能够用c*n来表示(c是常数),因此时间复杂度为O(n)。html
问题1解决方案:在网上没能找到关于间隔排序的资料,因此不太懂原理,应该也和冒泡排序差不太多吧,就按照题目的要求拼好了代码,可运行出来的结果排序彷佛并无完成。前端
假设如今有一个长度为6的数组,第一次的i为3,每一次迭代后i减小的值为2,那么在第一次迭代中,第一个元素与第三个元素进行比较,第二个元素与第四个元素进行比较,第三个元素与第五个元素进行比较,第四个元素与第六个元素进行比较,第一次迭代结束,i的值为1,第一个元素与第二个元素进行比较...相邻元素分别进行比较,迭代结束,i的值为-1小于1,此时循环结束,排序完成。
git
若是每次i的值减小1
web
与题目给的信息偏偏想反,反却是每次减一时能得出正确的排序,屡次修改代码中的间隔值,发现i每次减一时排序都能正确完成可是减2、减三时只能是在部分间隔值的状况下才能排序完成数组
Date da = new Date(); long s1 = da.getTime(); ...//具体运行的代码 long s2 = System.currentTimeMills(); System.out.println(s2 - s1);
代码开始运行时记录当前时间,代码结束前再记录一下当前时间,最后s2-s1即为运行时间,思路是没有问题,但是运行结果出来就有点小瑕疵,如图
数据结构
运行时间全为0且没带单位,我以为系统并无错,可能真是运行时间过短吧,小于一秒的计算机就自动四舍五入归为0了(?),我是这样认为的,因此我又寻找到另外一种比较精密计量时间的方法
以毫秒为单位计算的:学习
long startTime = System.currentTimeMillis();//获取当前时间 doSomeThing(); long endTime = System.currentTimeMillis(); System.out.println("程序运行时间:"+(endTime-startTime)+"ms");
以纳秒为单位计算的:this
long startTime = System.nanoTime();//获取当前时间 doSomeThing(); long endTime = System.nanoTime(); System.out.println("程序运行时间: "+(end-start)+"ns");
好似万事俱备,运行一下试试,问题仍是出现了,毫秒计时依然为0额。
此时我又找到了Date.getTime的说明
Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object,显然这个方法一样是以毫秒为单位来计量代码运行的时间的,以前什么四舍五入的解释就有问题了,在网上寻找答案也只获得一些绝不沾边的东西,有点束手无策,后来我再仔细一瞅,发现纳秒计时的方法彷佛没有出错啊,因而改为纳秒计时,而后就运行成功???有点莫名其妙。
debug
原觉得计时在稀里糊涂之中就能够所有解决了,把五大排序法中分别加上s一、s2,而后运行一下,此次又是归并排序的计时出现了些问题,如图
debug一下,错误应该出在忽略了递归上面,就是计算机每执行一次mergeSort的方法,就得从新开始计时一次,因此最后的结果会输出不少个归并排序的计时,参照快速排序的方法,至关于在归并排序的外面加一层壳专门用来计时,其余也想不出更好的办法了,最终结果如图
比较次数
上周没有错题哦
基于评分标准,我给谭鑫的博客打分:8分。得分状况以下:
正确使用Markdown语法(加1分):
模板中的要素齐全(加1分)
教材学习中的问题和解决过程, 三个问题加3分
代码调试中的问题和解决过程, 三个问题加3分
基于评分标准,我给方艺雯的博客打分:8分。得分状况以下:、
正确使用Markdown语法(加1分):
模板中的要素齐全(加1分)
教材学习中的问题和解决过程, 两个问题加2分
代码调试中的问题和解决过程, 三个问题加3分
排版精美加1分
这周在代码学习上仍是遇到了一些小的问题,在资料缺少的状况下,本身动手写代码的能力、分析问题的能力有了一些增强,但仍是稍显欠缺,须要继续努力
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 8/8 | |
第二周 | 470/470 | 1/2 | 12/20 | |
第三周 | 685/1155 | 2/4 | 10/30 | |
第四周 | 2499/3654 | 2/6 | 12/42 | |
第六周 | 1218/4872 | 2/8 | 10/52 |