归并排序
每次把待排序列分成两部分,分别对这两部分递归地用归并排序,完成后把这两个子部分合并成一个有序序列。
package algorithms.sort;
import algorithms.AbstractSort;
public class MergeSort extends AbstractSort {
@Override
public void sort(int[] array, int from, int len) {
if (len <= 1) {
return;
}
int[] tmpArray = new int[array.length];
mergeSort(array, from, len - 1, tmpArray);
}
private void mergeSort(int[] array, int from, int to, int[] tmpArray) {
if (to <= from) {
return;
}
int middle = (from + to) / 2;
mergeSort(array, from, middle, tmpArray);
mergeSort(array, middle + 1, to, tmpArray);
merge(array, from, to, middle, tmpArray);
}
private void merge(int[] array, int from, int to, int middle, int[] tmpArray) {
int k = 0;
int leftIndex = 0;
int rightIndex = to - from;
System.arraycopy(array, from, tmpArray, 0, middle - from + 1);
for (int i = 0; i < to - middle; i++) {
tmpArray[to - from - i] = array[middle + i + 1];
}
int range = to - from + 1;
while (k < range) {
if (tmpArray[leftIndex] - tmpArray[rightIndex] < 0) {
array[k + from] = tmpArray[leftIndex++];
} else {
array[k + from] = tmpArray[rightIndex--];
}
k++;
}
}
}
分享到:
相关推荐
这里我们将深入探讨标题和描述中提到的六种排序算法:快速排序、归并排序、插入排序、冒泡排序、选择排序以及堆排序。 1. **快速排序**:由C.A.R. Hoare在1960年提出,是一种高效的分治算法。快速排序的基本思想是...
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
Java排序算法实现主要涉及到两种经典的算法:冒泡排序和选择排序。这两种算法都是基于比较的排序方法,适用于小规模或教学目的的数据排序。 **冒泡排序(Bubble Sort)** 是一种简单直观的排序算法,其核心思想是...
归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序...
### Java排序算法详解 在Java编程中,排序算法是数据结构与算法中不可或缺的一部分,它不仅能够帮助我们理解和处理数据,还能提升程序的性能。本文将深入探讨Java中常见的几种基本排序算法,包括插入排序、交换排序...
这个名为"java排序算法-大全.rar"的压缩包文件显然包含了多种Java实现的排序算法,这对于我们理解和掌握这些算法至关重要。 首先,让我们从标签提及的两个经典排序算法开始:冒泡排序和折半排序。 1. **冒泡排序**...
Java常用排序算法-归并排序 归并排序是一种分治思想的排序算法,其基本思想是将待排序的数组分成若干个子序列,每个子序列都是有序的,然后再将子序列合并成一个有序的数组。这种算法的时间复杂度为O(n log n),...
根据给定的文件信息,我们将深入探讨两种经典的排序算法——快速排序和归并排序,并结合Java语言实现进行详细解析。 ### 快速排序算法 快速排序是一种高效的排序算法,采用分而治之的策略,其核心思想是选择一个...
Java排序算法大全是一份专为Java开发者准备的学习资源,涵盖了各种经典的排序算法,旨在帮助初学者和有经验的程序员深入理解排序的原理和实现。排序是计算机科学中的基础且重要的概念,它在数据处理、数据库操作、...
在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。排序算法是用来组织和优化数据结构的关键工具,它可以帮助我们快速查找、分析和处理数据。本资源包含的是Java实现的各种常见排序...
Java 实现归并排序是一种常用的排序算法,通过分治策略将原始数组分成小组,然后对每个小组进行排序,最后将排序好的小组合并成一个有序数组。下面是 Java 实现归并排序的知识点总结: 基本思想 归并排序的基本...
这个名为"Java各种排序算法代码.zip"的压缩包包含了一系列实现不同排序算法的Java源代码。排序算法是计算机科学中的基本概念,用于对一组数据进行排列。下面将详细讨论这些算法及其在Java中的实现。 1. 冒泡排序...
本文介绍了冒泡排序、选择排序、插入排序、快速排序和归并排序等常用排序算法,并提供了它们在Java中的实现代码。通过这些算法的学习和实践,可以加深对算法原理的理解,并提高解决复杂问题的能力。
该工具包含有Java一些比较常见的排序算法和查找算法。 排序算法包括:冒泡排序、选择排序 、插入排序、希尔排序、快速排序、归并排序、基数排序(桶排序) 查找算法包括:线性查找、二分查找、插值查询、斐波那契...
这个"Java排序算法包"提供了对多种排序算法的支持,并且允许用户根据自己的需求自定义比较条件,使得排序功能更加灵活。 1. **排序算法基础**: - 排序是指将一组数据按照特定的顺序进行排列的过程。常见的排序...
虽然选择排序的效率低于其他高级排序算法(如快速排序、归并排序、堆排序等),但它具有以下特点: 1. 算法简单,易于理解。 2. 在任何情况下,都需要进行n(n-1)/2次比较,无论输入数据是否已经排序。 3. 不需要额外...
"Java排序算法之归并排序简单实现" Java排序算法中的归并排序是一种高效的排序算法,它的平均时间复杂度、最好时间复杂度和最坏时间复杂度均为O(nlogn),空间复杂度为O(n),是一种稳定的排序算法。下面是对归并...
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
虽然它不是最高效的排序算法,如快速排序、归并排序或堆排序,但插入排序对于小规模数据或者接近有序的数据表现良好,而且其简单性和稳定性使其在理解和教学排序算法时具有重要价值。 通过学习插入排序,Java开发者...