在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++];
}
}
分享到:
相关推荐
在JDK 1.7版本中,ArrayList的实现已经优化,提供了`Collections.sort()`方法,它默认使用TimSort算法,这是一种结合了归并排序和插入排序的混合排序算法,既保证了稳定性,又在大部分情况下有良好的性能表现。...
- **多路归并排序**:对数组和集合提供了新的并行排序算法,提高了性能。 - **Strings in Switch**:允许在switch语句中使用字符串。 - **钻石操作符**:在创建泛型对象时可以省略类型参数,编译器会推断出类型。...
2. **多路归并排序(Fork/Join Framework)**:这是一种并行计算框架,通过将大任务拆分为小任务并行处理,提高了大规模数据处理的性能。 3. **字符串切换(String Switch Statement)**:Java 7允许使用`switch`...
2. **多路归并排序(Fork/Join框架)**:提供了一种并行处理任务的方式,利用多核处理器提高性能。 3. **钻石操作符**:在创建匿名类实例时简化了语法,不再需要显式指定类型参数。 4. **Strings in Switch**:在...
4. **Java 7 (Java SE 7)**: 这是Java的一个重要版本,引入了许多新特性,如改进的类型推断(Type Inference with钻石操作符),多路归并排序(Fork/Join Framework),字符串内联优化等。 5. **Windows i586**: ...
1. **多路归并排序( Fork/Join Framework )**: 这是一个用于并行执行任务的框架,通过将大任务拆分为小任务并行处理,提高程序性能。 2. **类型推断(Type Inference for Generic Instance Creation)**: 使用`...
在Java中实现归并排序,通常涉及以下几个关键步骤: 1. **分割**: - 归并排序首先将数组分为两半,直到每个子数组只有一个元素。这可以通过递归实现,每次都将数组的起始位置和结束位置作为参数,然后计算中间...
Java中实现冒泡排序的关键在于嵌套循环,外层循环控制遍历次数,内层循环进行元素比较和交换。 2. **选择排序**: 选择排序每次找出未排序部分的最小(或最大)元素,然后将其与未排序部分的第一个元素交换。在...
- **多路归并排序**:Java 7引入了并行多路归并排序算法,提高了数组排序的性能。 - **Strings in Switch**:现在可以在 switch 语句中直接使用字符串,增强了可读性和方便性。 - **钻石操作符**:在创建匿名类或...
除了上述算法,Java中还有其他经典的排序算法,如冒泡排序(Bubble Sort)、选择排序(Selection Sort)、快速排序(Quick Sort)、归并排序(Merge Sort)和堆排序(Heap Sort)。每种排序算法都有其适用场景和优...
在快速排序中,每次划分将问题规模减半,即a=b=2,而PARTITION()操作的时间复杂度为O(n)。因此,快速排序的时间复杂度可以用主定理来表达为T[n] = 2T[n/2] + O(n)。 然而,最坏情况发生在每次划分都使得一边只有一...
13. **多路归并排序(Fork/Join Framework)**:`java.util.concurrent.ForkJoinPool`和相关类提供了并行计算的新方法,适用于大数据量的排序和计算任务。 这些只是JDK 7 API中的一部分亮点,实际文档中涵盖了更多...
- **多路归并排序(Fork/Join Framework)**:并行计算框架,提高了大规模数据处理的效率。 - **Strings in Switch**:在switch语句中可以直接使用String对象。 - **try-with-resources**:自动关闭资源的语法...
它引入了一些重要的新特性,如类型推断(Type Inference)通过`<>`语法在泛型中实现,开关语句支持字符串(switch statements on Strings),多路归并排序(Fork/Join Framework)等。此外,它还提高了性能,增强了...
- **多路归并排序**:JDK7引入了Fork/Join框架,提高了大规模数据处理的性能。 - **钻石运算符**:在创建匿名内部类或泛型实例时,可以省略类型参数,如`new ArrayList()`。 - **尝试资源管理**:`try`块可以包含...
java写的八大经典排序算法(win7 jdk 1.6 下运行) 冒泡排序 BubbleSort 堆排序 HeapSort 插入排序 InsSort ...归并排序 MergeSort 基数排序 BucketSort 简单选择排序 SelectSort 希尔排序 ShellSort
2. **多路归并排序(Fork/Join Framework)**:这是一个并行计算框架,用于将大型任务拆分为更小的子任务,以利用多核处理器的并行处理能力。 3. **字符串inswitch语句**:在switch语句中可以直接使用字符串,提高...
2. **多路归并排序(Fork/Join框架)**:为并行计算提供了一个强大的框架,能够有效地利用多核处理器的优势。 3. **类型推断(钻石操作符)**:在创建泛型对象时,编译器可以自动推断类型参数,简化了代码。 4. **...
1. **多路归并排序(Fork/Join Framework)**:这是Java 7中的一个新特性,提供了一种并行处理大量数据的高效方式,通过ForkJoinPool和RecursiveTask类实现。 2. **钻石操作符(Diamond Operator)**:简化了匿名...
**`多路归并排序(Parallel Merge Sort)_** Java 7的`Arrays.sort()`和`Collections.sort()`方法利用了多线程进行并行排序,提高了大规模数据的排序性能,尤其是在多核处理器环境下。 **3. **`开关表达式(Switch...