总结概括:
1.数据结构 归并排序 (也是后续排序 LRD)
2.多线程 ForkJoin框架 繁重任务的并行计算框架,map-reduce思想
计算代码
/***
*@author dongsheng
*@date 2019/1/18 22:58
*@Description:
*@version 1.0.0
*/
public class ArrayMergerSortTask extends RecursiveAction {
// implementation details follow:
static final int THRESHOLD = 1000;
final int[] array;
final int lo, hi;
ArrayMergerSortTask(int[] array, int lo, int hi) {
this.array = array;
this.lo = lo;
this.hi = hi;
}
ArrayMergerSortTask(int[] array) {
this(array, 0, array.length);
}
protected void compute() {
if (hi - lo < THRESHOLD) //小于1000,就排序
sortSequentially(lo, hi);
else {
int mid = (lo + hi) >>> 1; //大于1000,拆分
invokeAll(new ArrayMergerSortTask(array, lo, mid),
new ArrayMergerSortTask(array, mid, hi));
merge(lo, mid, hi);
}
}
void sortSequentially(int lo, int hi) {
Arrays.sort(array, lo, hi); //利用JDK自带的排序进行
}
void merge(int lo, int mid, int hi) {
int[] buf = Arrays.copyOfRange(array, lo, mid);
for (int i = 0, j = lo, k = mid; i < buf.length; j++)
array[j] = (k == hi || buf[i] < array[k]) ? buf[i++] : array[k++];
}
public static void main(String[] args) throws Exception {
// 这里以一个长度为2千的数组做示例
int length = 2_000;
int[] array = new int[length];
// 填充数值
Random random = new Random();
for (int i = 0; i < length; i++) {
array[i