java双路快速排序的实现
摘要:为什么要有双路快速排序?当要排序的数组有大量的重复的话,如果只是单路的话,大量的重复值会在两个分割数组中其中的一个,这样在极端情况下退化成O(n^2)级别,对排序性能有较大的影响。当要排序的数组存在大量的重复值的时候,我们可以采取双路法进行快速排序。即两个指针移动,一端比分界值小就继续移动,一端比分
阅读全文
posted @
2018-08-30 00:04
蔡苗
阅读(448)
推荐(0)
随机化快速排序法
摘要:为什么要有随机化快速排序。对于快速排序大家知道,如果选取某个固定的值作为分界点(左边小于当前值,右边大于当前值),当排序的数组近乎有序,极有可能退化成O(n^2)级别的算法,因为拆分的数组极不均匀,两边的数组大小相差太大。如果采取随机化选取分界点,这样的化退化成O(n^2)几乎为零。
阅读全文
posted @
2018-08-29 23:04
蔡苗
阅读(1165)
推荐(0)
快速排序的Java实现
摘要:快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以
阅读全文
posted @
2018-08-29 22:22
蔡苗
阅读(171)
推荐(0)
java归并排序自底向上实现:
摘要:描述: 自底向上的归并排序算法的思想就是数组中先一个一个归并成两两有序的序列,两两有序的序列归并成四个有序的序列,然后四个有序的序列归并八个有序的序列,以此类推,直到,归并的长度大于整个数组的长度,此时整个数组有序。需要注意的是数组按照归并长度划分,最后一个子数组可能不满足长度要求,这个情况需要特殊
阅读全文
posted @
2018-08-27 23:51
蔡苗
阅读(589)
推荐(0)
Java实现归并排序
摘要:百度百科:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并操
阅读全文
posted @
2018-08-27 22:57
蔡苗
阅读(10424)
推荐(0)
Java中线程池的介绍
摘要:Java中线程池是运用场景的并发框架,几乎所需要异步或并发执行程序都可以使用线程池。合理使用线程池可以带来以下好处: 1. 降低资源消耗。通过重复利用以创建的线程降低线程的创建和销毁造成的消耗。 2. 提高响应速度。当任务到达时,任务可以不需要等到线程的创建就能立即执行。 3.提高线程的可管理性。
阅读全文
posted @
2018-08-27 18:19
蔡苗
阅读(177)
推荐(0)
Java锁的升降级及synchoronized优化
摘要:JavaSE 减少了获得锁和释放锁带来的性能消耗,引入了"偏向锁"和"轻量级锁"。在javaSe 1.6中,锁一共4种状态,级别从低到高依次是:无锁状态,偏向锁状态,轻量级锁状态,重量级锁状态,这个几个状态会随着竞争状态进行升级。锁可以升级但不能降级,意味者偏向锁升级成轻量级锁不能降级成偏向锁。这种
阅读全文
posted @
2018-08-18 14:10
蔡苗
阅读(1775)
推荐(0)
ThreadLocal应用与原理
摘要:ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用
阅读全文
posted @
2018-08-15 17:32
蔡苗
阅读(148)
推荐(0)