JAVA
D丶晓
这个作者很懒,什么都没留下…
展开
-
java入门基础
java入门基础001从helloworld开始public class World{ public static void main(String[] args){ System.out.println("helloWorld"); }}class后面跟着的 World是这个类的名字,一个文件中只能有一个类;main函数前的public是访问修饰限定符(还有private p...原创 2018-09-27 13:12:16 · 122 阅读 · 0 评论 -
七大排序整理(选择排序/直接插入排序/shell(希尔)排序/冒泡排序/快速排序/堆排/归并排序)
选择排序 :请看后文 直接插入排序 : 请看后文 shell排序 : 请看后文 冒泡排序 : 请看后文 快速排序 快速排序请点此链接 堆排 堆排请点此链接 归并排序 归并排序请点此链接各种排序性能对比如下:排序类型平均情况最好时间复杂度最坏时间复杂度空间复杂度稳定性选择排序O(n²)O(n²)O(n²...原创 2019-02-24 13:30:19 · 235 阅读 · 0 评论 -
排序-归并排序(二路归并)
时间复杂度:O(nlog₂n) 空间复杂度:O(n) 稳定;思路:归并排序是建立在归并操作上的一种有效的排序算法,是采用分治法的一个典型应用; 即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。public class MergeSort { public static void main(String[] args) { R...原创 2019-02-24 13:25:33 · 338 阅读 · 0 评论 -
排序-堆排序(heapSort)
时间复杂度:O(nlog₂n) 空间复杂度:O(1) 不稳定把此序列对应的二维数组看成一个完全二叉树。那么堆的含义就是:完全二叉树中任何一个非叶子节点的值均不大于(或不小于)其左,右孩子节点的值。 由上述性质可知大顶堆的堆顶的关键字肯定是所有关键字中最大的,小顶堆的堆顶的关键字是所有关键字中最小的。因此我们可使用大顶堆进行升序排序, 使用小顶堆进行降序排序。基本思想:此处以大顶堆为例,堆...原创 2019-02-24 13:20:03 · 187 阅读 · 0 评论 -
排序-快速排序之固定位置选取基准法(递归/非递归)
快速排序 固定位置选取排序:数据越有序,复杂度越高 随机选取基准排序 请点击查看 三分取中法 请点击查看 基于三分取中法的几种优化 请点击查看快速排序(递归):好:0(nlog2n), 坏:O(n2). 空间复杂度O(nlog₂n) 不稳定好情况:Partition 每次都划分得很均匀。坏情况:当待排序数组是正序或者逆序的时候。(退化成选择排序了)平均时间复杂度...原创 2019-02-24 13:14:14 · 714 阅读 · 0 评论 -
排序-快速排序的优化(三分取中法实现)
优化一:当待排列序列的长度分割到一定大小时,使用插入排序原因:对于很小和部分有序的数组,快排不如插入排序好。当待排序序列的长度分割到一定大小后,继续使用分割的效率比插入排序要差; 但是三分取中+插入排序还不能处理重复数组;优化二:聚集相同基准法;处理重复的数组元素原因:在一次分割结束后,可以把与par相等的元素聚集在一起。下次分割时,不用在对和par相等元素进行分割举例:待排序序列 1 ...原创 2019-02-24 13:03:39 · 825 阅读 · 0 评论 -
排序-快速排序之三分取中法
思想:引入的原因:虽然随机选取枢轴时,减少出现不好分割的几率,但是还是最坏情况下还是O(n^2),要缓解这种情况,就引入了三数取中选取枢轴分析:最佳的划分是将待排序的序列分成等长的子序列,最佳的状态我们可以使用序列的中间的值,也就是第N/2个数。可是,这很难算出来,并且会明显减慢快速排序的速度。这样的中值的估计可以通过随机选取三个元素并用它们的中值作为枢纽元而得到。事实上,随机性并没有多大的帮助...原创 2019-02-24 13:03:54 · 1681 阅读 · 0 评论 -
排序-快速排序之随机选取基准法
思想:基本的快速排序选取第一个或者最后一个元素作为基准。这样在数组已经有序的情况下,每次划分将得到最坏的结果。一种比较常见的优化方法是随机化算法,即随机选取一个元素作为基准。这种情况下虽然最坏情况仍然是O(n2),但最坏情况不再依赖于输入数据,而是由于随机函数取值不佳。实际上,随机化快速排序得到理论最坏情况的可能性仅为1/(2n)。所以随机化快速排序可以对于绝大多数输入数据达到O(nlogn)的期...原创 2019-02-24 13:06:18 · 2780 阅读 · 2 评论 -
循环语句和数组
循环语句的理解1. do while 语句和while语句的区别:while语句在进入循环体之前要先判断条件是否成立,如果成立的话则进入循环体。而do…while语句则是先执行循环体,然后再判断条件是否成立,如果成立的话则继续循环体,如果不成立则跳出循环;也就是说do-while循环至少要执行一次循环语句。2.break和continue的区别:break和continue都是用来控制...原创 2018-10-16 23:17:56 · 599 阅读 · 0 评论 -
Java——数组的拷贝
1.for循环拷贝: int[] array={1,2,3,4,5}; int[] brray=new int[array.length]; for(int i=0;i<array.length;i++) { brray[i]=array[i]; }这是基本数据类型,如果修改b[i]的值,则a[i]的值不会发生变...原创 2018-10-19 10:14:53 · 155 阅读 · 0 评论 -
ConcurrentHashMap在jdk1.8的详解
源码为jdk1.8Java7与Java8中的ConcurrentHashMap:在ConcurrentHashMap中主要通过锁分段技术实现上述目标。在Java7中,ConcurrentHashMap由Segment数组结构和HashEntry数组组成。Segment(分段锁) ,ConcurrentHashMap中的分段锁称为Segment,它即类似于HashMap的结构,即内部拥有一个...原创 2019-04-25 20:57:54 · 756 阅读 · 0 评论