目录html
一、查找git
查找是在一组数据项内找到指定目标或是肯定目标不存在的过程。面试
线性查找算法
二分查找
二分查找利用了查找池有序的特性,同时也要求表必须是有序的。相比于线性查找,二分查找更加高效。markdown
哈希查找
经过存储不一样的哈希值来肯定元素的位置数据结构
二、排序学习
排序是按某种标准将一列数据项按肯定的次序重排的过程。加密
选择排序
反复地将一个个具体的值放到它最终的有序位置,从而完成排序。spa
插入排序
反复地将一个个具体的值插入到表的已有序子表中,从而完成排序。.net
冒泡排序
反复地比较两个相邻元素,若是必要就交换次序,从而完成排序。
快速排序
经过划分子表,递归地对两个子表进行排序,从而完成排序。关键是要选择一个好的划分元素。
归并排序
递归地将表平分为两部分,直到每一个子表中只含一个元素,将这些表归并为有序表,从而完成排序。
排序算法效率
问题1解决方案:快速排序算法经过划分表,再递归地对两个子表进行排序,从而完成一组值的排序。最好的状况是枢纽元选取得当,每次都能均匀的划分序列, 时间复杂度为 O(n log n);最坏状况是枢纽元为最大或者最小数字,全部数都被划分到一个序列中,退化为冒泡排序,时间复杂度为O(n²)。因此快速排序的关键是要选取一个好的划分元素。
问题2解决方案:二分查找的前提是查找池元素有序,假若是乱序的,就会误导查找方向从而结果错误。
(statistics.sh脚本的运行结果截图)
上周未进行考试,故没有错题
查找与排序是数据结构里面入门级的算法,三年前学 Pascal 的时候由于高中学科时间缘由没有进行深刻学习,留下了很大遗憾,但愿能在如今补回来。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第一周 | 109/109 | 2/2 | 28/28 | 学习了Java的基本语法格式,熟练使用 Linux Bash 命令 |
第二周 | 550/659 | 1/3 | 23/51 | 学习掌握JDB调试命令 |
第三周 | 1028/1687 | 2/5 | 30/81 | 学习类的编写与使用 |
第四周 | 542/2229 | 2/7 | 22/103 | 学习方法重载,类的继承、聚合等 |
第五周 | 1197/3426 | 2/9 | 15/118 | 学习 Java Socket ,了解加密算法 |
第六周 | 1344/4770 | 1/10 | 22/140 | 学习多态与异常处理 |
第七周 | 3190/7960 | 2/12 | 30/170 | 学习Android |
第八周 | 1588/9548 | 2/14 | 30/200 | 学习查找与排序 |
计划学习时间:20小时
实际学习时间:30小时
改进状况:
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)