当前位置: 首页 > news >正文

东莞微网站建设免费优化网站

东莞微网站建设,免费优化网站,室内设计师联盟论坛,山西疫情最新情况今日新增在哪里数据结构加油站: Comparison Sorting Visualization 并发设计模式 单线程归并排序 public class MergeSort {private final int[] arrayToSort; //要排序的数组private final int threshold; //拆分的阈值,低于此阈值就不再进行拆分public MergeSort…

 数据结构加油站:

Comparison Sorting Visualization

并发设计模式

单线程归并排序

public class MergeSort {private final int[] arrayToSort; //要排序的数组private final int threshold;  //拆分的阈值,低于此阈值就不再进行拆分public MergeSort(final int[] arrayToSort, final int threshold) {this.arrayToSort = arrayToSort;this.threshold = threshold;}/*** 排序* @return*/public int[] mergeSort() {return mergeSort(arrayToSort, threshold);}public static int[] mergeSort(final int[] arrayToSort, int threshold) {//拆分后的数组长度小于阈值,直接进行排序if (arrayToSort.length < threshold) {//调用jdk提供的排序方法Arrays.sort(arrayToSort);return arrayToSort;}int midpoint = arrayToSort.length / 2;//对数组进行拆分int[] leftArray = Arrays.copyOfRange(arrayToSort, 0, midpoint);int[] rightArray = Arrays.copyOfRange(arrayToSort, midpoint, arrayToSort.length);//递归调用leftArray = mergeSort(leftArray, threshold);rightArray = mergeSort(rightArray, threshold);//合并排序结果return merge(leftArray, rightArray);}public static int[] merge(final int[] leftArray, final int[] rightArray) {//定义用于合并结果的数组int[] mergedArray = new int[leftArray.length + rightArray.length];int mergedArrayPos = 0;// 利用双指针进行两个数的比较int leftArrayPos = 0;int rightArrayPos = 0;while (leftArrayPos < leftArray.length && rightArrayPos < rightArray.length) {if (leftArray[leftArrayPos] <= rightArray[rightArrayPos]) {mergedArray[mergedArrayPos] = leftArray[leftArrayPos];leftArrayPos++;} else {mergedArray[mergedArrayPos] = rightArray[rightArrayPos];rightArrayPos++;}mergedArrayPos++;}while (leftArrayPos < leftArray.length) {mergedArray[mergedArrayPos] = leftArray[leftArrayPos];leftArrayPos++;mergedArrayPos++;}while (rightArrayPos < rightArray.length) {mergedArray[mergedArrayPos] = rightArray[rightArrayPos];rightArrayPos++;mergedArrayPos++;}return mergedArray;}

forkjoin排序

/*** 利用fork-join实现数组排序*/
public class MergeSortTask extends RecursiveAction {private final int threshold; //拆分的阈值,低于此阈值就不再进行拆分private int[] arrayToSort; //要排序的数组public MergeSortTask(final int[] arrayToSort, final int threshold) {this.arrayToSort = arrayToSort;this.threshold = threshold;}@Overrideprotected void compute() {//拆分后的数组长度小于阈值,直接进行排序if (arrayToSort.length <= threshold) {// 调用jdk提供的排序方法Arrays.sort(arrayToSort);return;}// 对数组进行拆分int midpoint = arrayToSort.length / 2;int[] leftArray = Arrays.copyOfRange(arrayToSort, 0, midpoint);int[] rightArray = Arrays.copyOfRange(arrayToSort, midpoint, arrayToSort.length);MergeSortTask leftTask = new MergeSortTask(leftArray, threshold);MergeSortTask rightTask = new MergeSortTask(rightArray, threshold);//调用任务,阻塞当前线程,直到所有子任务执行完成invokeAll(leftTask,rightTask);//提交任务
//		leftTask.fork();
//		rightTask.fork();
//		//合并结果
//		leftTask.join();
//		rightTask.join();// 合并排序结果arrayToSort = MergeSort.merge(leftTask.getSortedArray(), rightTask.getSortedArray());}public int[] getSortedArray() {return arrayToSort;}

随机生成一个数组的工具类

public class Utils {/*** 随机生成数组* @param size 数组的大小* @return*/public static int[] buildRandomIntArray(final int size) {int[] arrayToCalculateSumOf = new int[size];Random generator = new Random();for (int i = 0; i < arrayToCalculateSumOf.length; i++) {arrayToCalculateSumOf[i] = generator.nextInt(100000000);}return arrayToCalculateSumOf;}
}

单线程归并排序 & forkjoin排序  对比

public class ArrayToSortMain {public static void main(String[] args) {//生成测试数组  用于归并排序int[] arrayToSortByMergeSort = Utils.buildRandomIntArray(20000000);//生成测试数组  用于forkjoin排序int[] arrayToSortByForkJoin = Arrays.copyOf(arrayToSortByMergeSort, arrayToSortByMergeSort.length);//获取处理器数量int processors = Runtime.getRuntime().availableProcessors();MergeSort mergeSort = new MergeSort(arrayToSortByMergeSort, processors);long startTime = System.nanoTime();// 归并排序mergeSort.mergeSort();long duration = System.nanoTime()-startTime;System.out.println("单线程归并排序时间: "+(duration/(1000f*1000f))+"毫秒");//利用forkjoin排序MergeSortTask mergeSortTask = new MergeSortTask(arrayToSortByForkJoin, processors);//构建forkjoin线程池ForkJoinPool forkJoinPool = new ForkJoinPool(processors);startTime = System.nanoTime();//执行排序任务forkJoinPool.invoke(mergeSortTask);duration = System.nanoTime()-startTime;System.out.println("forkjoin排序时间: "+(duration/(1000f*1000f))+"毫秒");}
}

执行结果

http://www.ds6.com.cn/news/48482.html

相关文章:

  • 网站不备案可以做淘宝客吗刷外链
  • 扫码进网页怎么制作自动app优化官网
  • 凡科建站有哪些弊端自媒体平台注册下载
  • 万网域名查询注册商企业网站排名优化公司
  • 佛山营销网站建设开鲁网站seo不用下载
  • 网站维护学习新东方教育培训机构
  • 网站制作多少深圳百度推广优化
  • 做任务领取礼品的网站网站seo检测工具
  • 建筑网站资料排行榜高端营销型网站建设
  • 做网站什么前端框架方便微信朋友圈广告投放收费标准
  • 做a图片视频在线观看网站针对大学生推广引流
  • 大连无网站的企业有哪些如何推销产品给客户
  • 如何建立自己个人网站百度2022新版下载
  • 人才招聘网站怎么做国际最新新闻热点事件
  • 第寒网站建设品牌如何做推广
  • 网站建设营销方案百度搜索风云榜电视剧
  • 怎么在网站中搜索关键字营销策划的十个步骤
  • 唐山哪个公司做网站聊城seo优化
  • 响应式网站建设服务提供商免费模板
  • 网站外的seo公司模板建站
  • 网站开发一般采用什么框架平台推广引流怎么做
  • css做的网站不能往下拉友情链接有用吗
  • h5网站开发哪个好广告推广软文案例
  • wordpress主题修改教程关键字优化
  • 祥云县住房和城乡建设网站品牌推广策划方案案例
  • 南宁seo团队计划英语seo什么意思
  • 医疗设备响应式网站企业营销推广
  • 团购火锅自助网站建设英文seo
  • 嘉兴商城网站开发设计辽宁网站建设
  • 好吃易做的家常菜网站谷歌seo推广公司