zoukankan      html  css  js  c++  java
  • 多线程归并排序的实现 java

    多线程是非常适合归并排序的,因为归并排序是分治法,所以分割后可以独立运行,最后将结果归并起来就行了。如何写一个多线程程序呢?今天无聊,总结一下啊。

    首先写个普通的归并排序,以后的多线程就调用这个排序。

    1.这段代码很简单,就是一个基本的归并排序,知道这个类中的sort实现归并排序就OK.
    package
    归并排序; import java.util.Arrays; public class SequentialMergeSort { public void sort(int[] arr) { // handle null inputs if (arr == null) { throw new IllegalArgumentException("Input array cannot be null"); } if (arr.length == 0 || arr.length == 1) { // already sorted return return; } int start = 0; int end = arr.length - 1; mergeSort(arr, start, end); } // helper method for merge sort protected void mergeSort(int[] arr, int start, int end) { if (start < end) { int mid = (start + end) / 2; mergeSort(arr, start, mid); mergeSort(arr, mid + 1, end); merge(arr, start, mid, end); } } protected void merge(int[] arr, int start, int mid, int end) { // copy the left half into left array int[] leftArray = Arrays.copyOfRange(arr, start, mid + 1); // copy right half into right array int[] rightArray = Arrays.copyOfRange(arr, mid + 1, end + 1); int leftArrayPtr = 0, rightArrayPtr = 0, inputArrayPtr = start; // merge until we reach end of either one of the arrays for (; leftArrayPtr < leftArray.length && rightArrayPtr < rightArray.length; inputArrayPtr++) { if (leftArray[leftArrayPtr] <= rightArray[rightArrayPtr]) { arr[inputArrayPtr] = leftArray[leftArrayPtr]; leftArrayPtr++; } else { arr[inputArrayPtr] = rightArray[rightArrayPtr]; rightArrayPtr++; } } // finish up if there are any remaining elements for (; leftArrayPtr < leftArray.length; leftArrayPtr++, inputArrayPtr++) { arr[inputArrayPtr] = leftArray[leftArrayPtr]; } for (; rightArrayPtr < rightArray.length; rightArrayPtr++, inputArrayPtr++) { arr[inputArrayPtr] = rightArray[rightArrayPtr]; } } }

    2.多线程咋实现呢?

    比如现在有

  • 相关阅读:
    Idea启动多服务时的Dashboard展示
    通过maven动态配置spring boot配置文件
    辅域抢夺五大角色命令
    H3C交换机堆叠技术
    KMS激活专用:所有Windows版本的GVLK密钥对照表
    Windows Server 2012从Evaluation版转成正式版
    u盘装系统无法引导
    [调优]彻底解决RDP连接过程缓慢的问题
    [排错]无法初始化 vGPU“grid_p40-1q”的插件“/usr/lib64/vmware/plugin/libnvidia-vgx.so”
    Virtual Apps and Desktops 7 1912 LTSR集成DB迁移到SQL Server 2016 AlwaysOn生产环境
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3961305.html
Copyright © 2011-2022 走看看