`

jdk中提供的快速排序的实现

    博客分类:
  • java
 
阅读更多

/*
 * Copyright (c) 1996, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/**
 * Sort: a class that uses the quicksort algorithm to sort an
 *       array of objects.
 *
 * @author Sunita Mani
 */

package sun.misc;

public class Sort {

    private static void swap(Object arr[], int i, int j) {
        Object tmp;

        tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    /**
     * quicksort the array of objects.
     *
     * @param arr[] - an array of objects
     * @param left - the start index - from where to begin sorting
     * @param right - the last index.
     * @param comp - an object that implemnts the Compare interface to resolve thecomparison.
     */
    public static void quicksort(Object arr[], int left, int right, Compare comp) {
        int i, last;

        if (left >= right) { /* do nothing if array contains fewer than two */
            return;          /* two elements */
        }
        swap(arr, left, (left+right) / 2);
        last = left;
        for (i = left+1; i <= right; i++) {
            if (comp.doCompare(arr[i], arr[left]) < 0) {
                swap(arr, ++last, i);
            }
        }
        swap(arr, left, last);
        quicksort(arr, left, last-1, comp);
        quicksort(arr, last+1, right, comp);
    }

    public static void quicksort(Object arr[], Compare comp) {
        quicksort(arr, 0, arr.length-1, comp);
    }
}

 

pivot使用的中间元素

0
2
分享到:
评论

相关推荐

    java实现快速排序小结

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

    JDK8排序总结

    首先,Java8在`java.util.Arrays`类中提供了新的方法来支持更高效的排序操作。最显著的是`Arrays.sort()`方法的增强,它不仅支持基本类型的数组排序,还支持对象数组和列表的排序。 1. **流(Stream)排序**:Java8...

    jdk1.8中文.zip

    5. **方法引介**:允许在接口中定义默认方法,不需实现类提供具体实现,这为接口添加新功能提供了便利,同时避免破坏已有的实现。 6. **Date和Time API改进**:JDK1.8使用`java.time`包替换了原有的`java.util.Date...

    JDK 1.8 中文API文档

    6. **接口默认方法**:在JDK 1.8中,接口可以拥有默认方法(default methods),这种方法有一个默认的实现,允许接口在不破坏现有实现的情况下添加新方法。 7. **方法引用和构造器引用**:这是与lambda表达式相关的...

    java JDK api文档

    Java JDK API 文档中提供了多种排序算法,包括冒泡排序、选择排序、插入排序等。这些算法都可以用来对数组或列表进行排序,以下是对每种算法的详细介绍。 冒泡排序 冒泡排序是一种简单的排序算法,通过重复地遍历...

    jdk1.7免安装版

    最后,JDK1.7的免安装版意味着用户可以直接下载解压后使用,无需进行复杂的安装过程,简化了部署,便于在不同环境中快速配置Java开发环境。 总的来说,JDK1.7免安装版是一个功能强大的Java开发工具,它包含了一系列...

    java jdk 8 帮助文档 中文 文档 chm 谷歌翻译(jdk api 1.8_google)

    3. **默认方法**:在接口中引入了默认方法,允许在接口中定义实现,这使得接口可以在不破坏向后兼容性的情况下增加新方法。例如,`java.util.Collection`接口添加了`default void forEach(Consumer&lt;? super E&gt; ...

    JDK1.6中Arraylist,Vector,LinkedList源码

    在JDK 1.6中,ArrayList提供了线程不安全的高效操作,适合于非并发环境下的高性能读写操作。其优点在于随机访问快速,因为数组支持索引直接访问;缺点是插入和删除元素需要移动后续元素,效率较低。 Vector与...

    jdk1.8.0_144

    8. **并行数组操作**:`java.util.Arrays`类提供了新的并行操作,如`parallelSort()`,利用多核处理器的优势进行快速排序。 安装JDK1.8.0_144后,用户需要配置环境变量`JAVA_HOME`、`PATH`和`CLASSPATH`,确保系统...

    JDK7中的ForkJoin模式

    以下是一个基于 Fork/Join 模式的快速排序算法的简单实现: ```java class SortTask extends RecursiveAction { final long[] array; final int lo; final int hi; private int THRESHOLD = 30; public ...

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

    本篇将重点讲解如何利用ArrayList实现快速排序(Quick Sort)、归并排序(Merge Sort)和堆排序(Heap Sort)这三种经典的排序算法,并探讨它们的原理、优缺点以及在实际应用中的选择。 **快速排序(Quick Sort)**...

    jdk7下载下载

    6. **并行数组操作**:`java.util.Arrays`类增加了许多并行处理的方法,如`parallelSort()`,利用多核处理器进行快速排序。 7. **元注解**:允许自定义注解应用到其他注解上,增强了注解的灵活性和可复用性。 8. *...

    jdk8免安装版.zip

    在这个“jdk8免安装版.zip”压缩包中,我们得到了一个无需传统安装过程的JDK8版本,这意味着用户可以直接解压缩文件并开始使用,简化了在不同系统上快速配置Java环境的过程。 JDK8是Oracle公司发布的Java平台标准版...

    jdk1.6免安装

    Java Development Kit(JDK)是Java编程...它提供了一种快速简便的方式来搭建和测试特定Java版本的环境,避免了因安装过程带来的复杂性和潜在冲突。在处理这些情况时,理解如何正确配置和使用这个版本的JDK至关重要。

    JDK8 绿色版 免安装

    6. **默认方法**:在接口中引入了默认方法,允许接口提供默认实现,这使得接口升级更加灵活,避免破坏已有实现。 7. **Optional类**:为了解决null安全问题,JDK8引入了`Optional&lt;T&gt;`类,它可以表示一个可能为null...

    jdkAPI1.8中文版

    - **接口默认方法和静态方法**:接口中可以定义默认方法,无需实现类提供具体实现;同时,接口还可以包含静态方法。 **2. JDK 1.8核心类库** - **基础类库**:如String、Integer、ArrayList、HashMap等,这些都是...

    jdk使用164个实例

    4. **`HashMap`和`TreeMap`类**:实现`Map`接口,用于存储键值对,`HashMap`基于哈希表,提供快速查找,而`TreeMap`基于红黑树,保持元素排序。 5. **`Thread`类**:用于实现多线程,通过`start()`方法启动一个新...

    史上最好jdk 1.8 API 中文文档

    4. **默认方法**:在接口中可以定义具有实现的默认方法,允许不破坏已有接口的实现类,同时引入新功能。 5. **日期和时间API的改进**:Joda-Time被新的java.time包取代,提供了更强大、更易用的日期和时间处理功能...

    jdk1.8.0_181免安装版.zip

    这个版本的JDK是一个免安装版,意味着用户可以直接解压文件来使用,无需经过传统的安装过程,这在某些场景下非常方便,比如在服务器上快速部署或测试环境中快速搭建开发环境。 首先,让我们深入了解Java 8的重要...

    jdk1.8_API中文.CHM百度云链接永久有效

    API文档(Application Programming Interface)是软件开发过程中不可或缺的一部分,它为开发者提供了详细的接口说明、方法描述、参数定义以及示例代码等内容,帮助开发者快速理解和掌握API的使用方式。对于JDK这样的...

Global site tag (gtag.js) - Google Analytics