当前位置: 首页 > 科技观察

Java静态内部类、匿名内部类、成员内部类和局部内部类

时间:2023-03-16 15:15:16 科技观察

一、前言什么是算法?算法是简单指令的集合,是指定的简单指令的集合。判断算法的重要指标:第一,能否解决问题;第二,算法的运行时间,即解决问题并产生结果需要多长时间;以及所需的空间资源,例如内存。很多时候,仅仅编写一个工作程序是不够的。因为在大数据的情况下,运行时间是一个重要的问题。算法性能用大O表示法表示。大O表示法用于标记相对增长率,精度较粗。例如,2N和3N+2都是O(N)。也就是常说的线性增长,还有指数增长等等。典型增长率典型的提供性能的方式是分治法,即分支分治策略:将问题分成两个大致相等的子问题,递归求解,即被划分的部分;征服阶段将两个子问题的解决方案拼凑在一起,并可能需要少量额外的工作,最终得出整个问题的解决方案。2.排序排序问题是一个古老但流行的问题。从接触ACM到现在工作,每次涉及到算法,或者阅读JDK源码中的一些算法,经常会出现排序算法。排序算法是对一组数组(或序列)进行重新排列,排列后的数据符合从大到小(或从小到大)的顺序。将数据从无序更改为有序有什么好处?应用层:最简单的解决方法是求最大值或最小值来解决“组合”问题,即将相同的符号元素连接在一起,匹配多个文件中的两个或多个ItemLookupInformationSystemLevelsKeyedValues:DecreasingEntropyofSystems,IncreasingOrderofSystems(DonaldKnuth的经典《计算机程序设计艺术》(计算机编程的艺术),第3卷)根据维基百科,在主内存中进行的排序称为内部排序。需要在磁盘等其他存储上进行的排序称为外部排序。接口是一种抽象类型,它是用接口声明的抽象方法(compareTo)的集合。因此,待排序的对象属于Comparable类型,即实现Comparable接口,然后调用对象实现的compareTo方法进行比较,再进行排序。这些条件下的排序称为基于比较的排序(comparison-basedsorting)。这时熊N加入队伍,它从队伍尾部开始比。如果它比前一只熊低,就和被比较的熊交换位置,从尾到头依次比较和交换位置。终于换到了熊N该有的位置。这就是插入排序的原理。插入排序是最简单的排序之一。ps:只看冒泡排序,不建议学习。由N-1次排序遍历组成。如果此类元素已排序,则不需要排序。即N=1(1-1=0)每次排序保证从第一个位置到当前位置的元素都排好序。如图:每个元素向前比较,在自己的位置结束。代码解析如下:从数组的第二个元素开始,向前比较。如果小于第一个元素,则交换位置。如果比较的是第二个元素,那么就是第三个、第四个……以此类推。比较最后一个元素时,排序的时间复杂度是O(N^2),最好的场景是排序已经排好,也就是O(N),因为不能满足循环的判断条件;最极端的是倒序数组,即O(N^2)。所以算法的时间复杂度是O(N^2)运行main方法,结果如下:[2,3,1,4,3][1,2,3,3,4]然后考虑优化,会发生什么优化呢?插入排序的优化版本不是前向比较。与上半场相比,两点对比会更好。具体的代码大家可以自己试试。4、Array.sort源码中的插入排序上面使用了自己实现的插入算法进行排序。其实JDK提供了Array.sort方法来方便排序。案例代码如下:运行main方法,结果如下:[2,3,1,4,3][1,2,3,3,4]Arrays.sort是如何实现的?JDK1.2有了Arrays,JDK1.8优化了排序算法的一个版本。大致如下:如果元素个数小于47,使用插入排序;如果元素个数小于286,使用快速排序Timsort算法集成归并排序和插入排序在源码中可以看到mergeSort集成了插入排序算法,和上面的实现类似。这里不逐行解释。五、总结算法是解决问题的。因此,不一定是一种算法解决一个问题,而是多种算法可能一起解决一个问题。达到问题的最优解。插入排序,就这么简单。