`

java jdk中的归并排序实现

 
阅读更多

在Arrays.java中的sort中  

    public static void sort(Object[] a, int fromIndex, int toIndex) {
        if (LegacyMergeSort.userRequested)
            legacyMergeSort(a, fromIndex, toIndex);
        else
            ComparableTimSort.sort(a, fromIndex, toIndex);
    }

    /** To be removed in a future release. */
    private static void legacyMergeSort(Object[] a,
                                        int fromIndex, int toIndex) {
        rangeCheck(a.length, fromIndex, toIndex);
        Object[] aux = copyOfRange(a, fromIndex, toIndex);
        mergeSort(aux, a, fromIndex, toIndex, -fromIndex);
    }

    /**
     * Tuning parameter: list size at or below which insertion sort will be
     * used in preference to mergesort.
     * To be removed in a future release.
     */
    private static final int INSERTIONSORT_THRESHOLD = 7;

    /**
     * Src is the source array that starts at index 0
     * Dest is the (possibly larger) array destination with a possible offset
     * low is the index in dest to start sorting
     * high is the end index in dest to end sorting
     * off is the offset to generate corresponding low, high in src
     * To be removed in a future release.
     */
    private static void mergeSort(Object[] src,
                                  Object[] dest,
                                  int low,
                                  int high,
                                  int off) {
        int length = high - low;

        // Insertion sort on smallest arrays
        if (length < INSERTIONSORT_THRESHOLD) {
            for (int i=low; i<high; i++)
                for (int j=i; j>low &&
                         ((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
                    swap(dest, j, j-1);
            return;
        }

        // Recursively sort halves of dest into src
        int destLow  = low;
        int destHigh = high;
        low  += off;
        high += off;
        int mid = (low + high) >>> 1;
        mergeSort(dest, src, low, mid, -off);
        mergeSort(dest, src, mid, high, -off);

        // If list is already sorted, just copy from src to dest.  This is an
        // optimization that results in faster sorts for nearly ordered lists.
        if (((Comparable)src[mid-1]).compareTo(src[mid]) <= 0) {
            System.arraycopy(src, low, dest, destLow, length);
            return;
        }

        // Merge sorted halves (now in src) into dest
        for(int i = destLow, p = low, q = mid; i < destHigh; i++) {
            if (q >= high || p < mid && ((Comparable)src[p]).compareTo(src[q])<=0)
                dest[i] = src[p++];
            else
                dest[i] = src[q++];
        }
    }
 
0
1
分享到:
评论

相关推荐

    Java ArrayList实现的快排,归并排序,堆排序

    在JDK 1.7版本中,ArrayList的实现已经优化,提供了`Collections.sort()`方法,它默认使用TimSort算法,这是一种结合了归并排序和插入排序的混合排序算法,既保证了稳定性,又在大部分情况下有良好的性能表现。...

    java JDK7 官网源码 core

    - **多路归并排序**:对数组和集合提供了新的并行排序算法,提高了性能。 - **Strings in Switch**:允许在switch语句中使用字符串。 - **钻石操作符**:在创建泛型对象时可以省略类型参数,编译器会推断出类型。...

    Java JDK_1.7下载

    2. **多路归并排序(Fork/Join Framework)**:这是一种并行计算框架,通过将大任务拆分为小任务并行处理,提高了大规模数据处理的性能。 3. **字符串切换(String Switch Statement)**:Java 7允许使用`switch`...

    Java-jdk-1.7.0_80

    2. **多路归并排序(Fork/Join框架)**:提供了一种并行处理任务的方式,利用多核处理器提高性能。 3. **钻石操作符**:在创建匿名类实例时简化了语法,不再需要显式指定类型参数。 4. **Strings in Switch**:在...

    java jdk demo

    4. **Java 7 (Java SE 7)**: 这是Java的一个重要版本,引入了许多新特性,如改进的类型推断(Type Inference with钻石操作符),多路归并排序(Fork/Join Framework),字符串内联优化等。 5. **Windows i586**: ...

    JAVA JDK 7.0 帮助文档,带查询的

    1. **多路归并排序( Fork/Join Framework )**: 这是一个用于并行执行任务的框架,通过将大任务拆分为小任务并行处理,提高程序性能。 2. **类型推断(Type Inference for Generic Instance Creation)**: 使用`...

    java代码-归并排序-----

    在Java中实现归并排序,通常涉及以下几个关键步骤: 1. **分割**: - 归并排序首先将数组分为两半,直到每个子数组只有一个元素。这可以通过递归实现,每次都将数组的起始位置和结束位置作为参数,然后计算中间...

    各种排序算法java实现

    Java中实现冒泡排序的关键在于嵌套循环,外层循环控制遍历次数,内层循环进行元素比较和交换。 2. **选择排序**: 选择排序每次找出未排序部分的最小(或最大)元素,然后将其与未排序部分的第一个元素交换。在...

    jdk1.7 64位 官方正式版下载

    - **多路归并排序**:Java 7引入了并行多路归并排序算法,提高了数组排序的性能。 - **Strings in Switch**:现在可以在 switch 语句中直接使用字符串,增强了可读性和方便性。 - **钻石操作符**:在创建匿名类或...

    java常见的排序算法源代码

    除了上述算法,Java中还有其他经典的排序算法,如冒泡排序(Bubble Sort)、选择排序(Selection Sort)、快速排序(Quick Sort)、归并排序(Merge Sort)和堆排序(Heap Sort)。每种排序算法都有其适用场景和优...

    java实现快速排序小结

    在快速排序中,每次划分将问题规模减半,即a=b=2,而PARTITION()操作的时间复杂度为O(n)。因此,快速排序的时间复杂度可以用主定理来表达为T[n] = 2T[n/2] + O(n)。 然而,最坏情况发生在每次划分都使得一边只有一...

    JDK7-API-帮助文档(英文版).rar

    13. **多路归并排序(Fork/Join Framework)**:`java.util.concurrent.ForkJoinPool`和相关类提供了并行计算的新方法,适用于大数据量的排序和计算任务。 这些只是JDK 7 API中的一部分亮点,实际文档中涵盖了更多...

    jdk1.7免安装版本

    - **多路归并排序(Fork/Join Framework)**:并行计算框架,提高了大规模数据处理的效率。 - **Strings in Switch**:在switch语句中可以直接使用String对象。 - **try-with-resources**:自动关闭资源的语法...

    jdk7及jdk8包

    它引入了一些重要的新特性,如类型推断(Type Inference)通过`&lt;&gt;`语法在泛型中实现,开关语句支持字符串(switch statements on Strings),多路归并排序(Fork/Join Framework)等。此外,它还提高了性能,增强了...

    Java开发所需要的环境配置文件jdk7

    - **多路归并排序**:JDK7引入了Fork/Join框架,提高了大规模数据处理的性能。 - **钻石运算符**:在创建匿名内部类或泛型实例时,可以省略类型参数,如`new ArrayList()`。 - **尝试资源管理**:`try`块可以包含...

    java八大经典排序算法

    java写的八大经典排序算法(win7 jdk 1.6 下运行) 冒泡排序 BubbleSort 堆排序 HeapSort 插入排序 InsSort ...归并排序 MergeSort 基数排序 BucketSort 简单选择排序 SelectSort 希尔排序 ShellSort

    JDK1.7-64/32位精简绿色版

    2. **多路归并排序(Fork/Join Framework)**:这是一个并行计算框架,用于将大型任务拆分为更小的子任务,以利用多核处理器的并行处理能力。 3. **字符串inswitch语句**:在switch语句中可以直接使用字符串,提高...

    jdk1.7和jdk1.6

    2. **多路归并排序(Fork/Join框架)**:为并行计算提供了一个强大的框架,能够有效地利用多核处理器的优势。 3. **类型推断(钻石操作符)**:在创建泛型对象时,编译器可以自动推断类型参数,简化了代码。 4. **...

    jdk7 for mac 资源

    1. **多路归并排序(Fork/Join Framework)**:这是Java 7中的一个新特性,提供了一种并行处理大量数据的高效方式,通过ForkJoinPool和RecursiveTask类实现。 2. **钻石操作符(Diamond Operator)**:简化了匿名...

    JDK7新特性 doc中文文档

    **`多路归并排序(Parallel Merge Sort)_** Java 7的`Arrays.sort()`和`Collections.sort()`方法利用了多线程进行并行排序,提高了大规模数据的排序性能,尤其是在多核处理器环境下。 **3. **`开关表达式(Switch...

Global site tag (gtag.js) - Google Analytics