/*
* 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使用的中间元素
分享到:
相关推荐
在快速排序中,每次划分将问题规模减半,即a=b=2,而PARTITION()操作的时间复杂度为O(n)。因此,快速排序的时间复杂度可以用主定理来表达为T[n] = 2T[n/2] + O(n)。 然而,最坏情况发生在每次划分都使得一边只有一...
首先,Java8在`java.util.Arrays`类中提供了新的方法来支持更高效的排序操作。最显著的是`Arrays.sort()`方法的增强,它不仅支持基本类型的数组排序,还支持对象数组和列表的排序。 1. **流(Stream)排序**:Java8...
5. **方法引介**:允许在接口中定义默认方法,不需实现类提供具体实现,这为接口添加新功能提供了便利,同时避免破坏已有的实现。 6. **Date和Time API改进**:JDK1.8使用`java.time`包替换了原有的`java.util.Date...
6. **接口默认方法**:在JDK 1.8中,接口可以拥有默认方法(default methods),这种方法有一个默认的实现,允许接口在不破坏现有实现的情况下添加新方法。 7. **方法引用和构造器引用**:这是与lambda表达式相关的...
3. **默认方法**:在接口中引入了默认方法,允许在接口中定义实现,这使得接口可以在不破坏向后兼容性的情况下增加新方法。例如,`java.util.Collection`接口添加了`default void forEach(Consumer<? super E> ...
Java JDK API 文档中提供了多种排序算法,包括冒泡排序、选择排序、插入排序等。这些算法都可以用来对数组或列表进行排序,以下是对每种算法的详细介绍。 冒泡排序 冒泡排序是一种简单的排序算法,通过重复地遍历...
最后,JDK1.7的免安装版意味着用户可以直接下载解压后使用,无需进行复杂的安装过程,简化了部署,便于在不同环境中快速配置Java开发环境。 总的来说,JDK1.7免安装版是一个功能强大的Java开发工具,它包含了一系列...
在JDK 1.6中,ArrayList提供了线程不安全的高效操作,适合于非并发环境下的高性能读写操作。其优点在于随机访问快速,因为数组支持索引直接访问;缺点是插入和删除元素需要移动后续元素,效率较低。 Vector与...
8. **并行数组操作**:`java.util.Arrays`类提供了新的并行操作,如`parallelSort()`,利用多核处理器的优势进行快速排序。 安装JDK1.8.0_144后,用户需要配置环境变量`JAVA_HOME`、`PATH`和`CLASSPATH`,确保系统...
以下是一个基于 Fork/Join 模式的快速排序算法的简单实现: ```java class SortTask extends RecursiveAction { final long[] array; final int lo; final int hi; private int THRESHOLD = 30; public ...
本篇将重点讲解如何利用ArrayList实现快速排序(Quick Sort)、归并排序(Merge Sort)和堆排序(Heap Sort)这三种经典的排序算法,并探讨它们的原理、优缺点以及在实际应用中的选择。 **快速排序(Quick Sort)**...
6. **并行数组操作**:`java.util.Arrays`类增加了许多并行处理的方法,如`parallelSort()`,利用多核处理器进行快速排序。 7. **元注解**:允许自定义注解应用到其他注解上,增强了注解的灵活性和可复用性。 8. *...
在这个“jdk8免安装版.zip”压缩包中,我们得到了一个无需传统安装过程的JDK8版本,这意味着用户可以直接解压缩文件并开始使用,简化了在不同系统上快速配置Java环境的过程。 JDK8是Oracle公司发布的Java平台标准版...
Java Development Kit(JDK)是Java编程...它提供了一种快速简便的方式来搭建和测试特定Java版本的环境,避免了因安装过程带来的复杂性和潜在冲突。在处理这些情况时,理解如何正确配置和使用这个版本的JDK至关重要。
6. **默认方法**:在接口中引入了默认方法,允许接口提供默认实现,这使得接口升级更加灵活,避免破坏已有实现。 7. **Optional类**:为了解决null安全问题,JDK8引入了`Optional<T>`类,它可以表示一个可能为null...
- **接口默认方法和静态方法**:接口中可以定义默认方法,无需实现类提供具体实现;同时,接口还可以包含静态方法。 **2. JDK 1.8核心类库** - **基础类库**:如String、Integer、ArrayList、HashMap等,这些都是...
4. **`HashMap`和`TreeMap`类**:实现`Map`接口,用于存储键值对,`HashMap`基于哈希表,提供快速查找,而`TreeMap`基于红黑树,保持元素排序。 5. **`Thread`类**:用于实现多线程,通过`start()`方法启动一个新...
4. **默认方法**:在接口中可以定义具有实现的默认方法,允许不破坏已有接口的实现类,同时引入新功能。 5. **日期和时间API的改进**:Joda-Time被新的java.time包取代,提供了更强大、更易用的日期和时间处理功能...
这个版本的JDK是一个免安装版,意味着用户可以直接解压文件来使用,无需经过传统的安装过程,这在某些场景下非常方便,比如在服务器上快速部署或测试环境中快速搭建开发环境。 首先,让我们深入了解Java 8的重要...
API文档(Application Programming Interface)是软件开发过程中不可或缺的一部分,它为开发者提供了详细的接口说明、方法描述、参数定义以及示例代码等内容,帮助开发者快速理解和掌握API的使用方式。对于JDK这样的...