`

归并排序Java版

 
阅读更多

归并排序算法采用分治方法,把两个有序表合并成一个新的有序表。归并排序是一种稳定的排序算法,即相等元素的顺序不会改变。

public class MergeSort {
 private void merge(int[] a , int begin, int mid, int end, int[] temp) {
  int i = begin, j = mid + 1;
  int m = mid, n = end;
  int k = 0;
  while(i <= m && j <= n) {
   if(a[i] < a[j]) {
    temp[k++] = a[i++];
   } else {
    temp[k++] = a[j++];
   }
  }
  while(i <= m) {
   temp[k++] = a[i++];
  }
  while(j <= n) {
   temp[k++] = a[j++];
  }
  for(int h = 0; h < k; h++) {
   a[begin + h] = temp[h];
  }
 }
 
 public void mergeSort(int[] a, int begin, int end, int[] temp) {
  if(begin < end) {
   int mid = (begin + end) / 2;
   mergeSort(a, begin, mid, temp);
   mergeSort(a, mid + 1, end, temp);
   merge(a, begin, mid, end, temp);
  }
 }
 
 public static void main(String[] args) {
  int[] arrays = new int[]{7, 20, 23, 0, 4, 8, 12, 3, 18, 8};
  int[] temps = new int[arrays.length];
  MergeSort mergeSort = new MergeSort();
  mergeSort.mergeSort(arrays, 0, arrays.length - 1, temps);
 
  for(int temp : arrays) {
   System.out.print(temp + ",");
  }
 }
}

 归并排序的最好、最坏和平均时间复杂试都是O(nlogn),空间复杂度是O(n)。

分享到:
评论

相关推荐

    自然归并排序java版

    自然合并的核心主要是一个Pass函数,这个函数中设置了一个array数组,来存放每一组有序元素的起始元素的下标,最后再将最后一个元素的下标+1存放为array数组的最后一个元素,这样,在后面的合并实现中会显现出这样记录的...

    java实现归并排序

    Java实现归并排序 Java 实现归并排序是一种常用的排序算法,通过分治策略将原始数组分成小组,然后对每个小组进行排序,最后将排序好的小组合并成一个有序数组。下面是 Java 实现归并排序的知识点总结: 基本思想 ...

    归并排序Java_归并排序_

    在Java中实现归并排序,我们可以创建一个名为`MergeSort`的类来封装整个过程。归并排序的基本思想是将待排序的序列分成两个或更多的子序列,对每个子序列分别进行排序,然后将排序后的子序列合并成一个有序序列。这...

    归并排序Java源代码

    利用分治法思想实现归并排序,Java语言描述。

    Java实现归并排序

    在Java中实现归并排序,主要涉及到以下几个关键步骤: 1. **分割(Divide)**:将原始数组分为两个相等(或接近相等)的子数组。这通常通过取数组中间索引来完成。例如,如果数组长度为`n`,则可以将前`n/2`个元素...

    外部归并排序Java实现

    Java实现外部归并排序的过程包括以下几个关键步骤: 1. **划分阶段**: - 将原始数据分割成多个小文件,每个文件包含可以一次性加载到内存中的数据量。这通常通过创建一系列的子序列(也称为块或桶)完成。 - 对...

    归并排序(JAVA)

    在Java中实现归并排序,我们可以将一个大数组分成两个小数组,分别对它们进行排序,然后将排序后的子数组合并成一个有序的大数组。这个过程会递归地进行,直到每个子数组只包含一个元素,因为单个元素天生就是有序的...

    java归并排序

    在Java中实现归并排序,我们可以分别实现递归版和非递归版,这两种方法各有其特点和适用场景。 ### 1. 分治策略 归并排序的核心是分治法,它将一个大数组分为两个相等或接近相等的子数组,分别对这两个子数组进行...

    如何使用Java实现归并排序算法,程序详细解读

    归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序算法,程序详细解读; 归并排序:如何使用Java实现归并排序...

    插入排序和归并排序的实现java

    这里我们将深入探讨两种常见的排序算法:插入排序(Insertion Sort)和归并排序(Merge Sort),它们都是在Java环境下实现的。 **插入排序**是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序...

    排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht

    排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht

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

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

    JavaSwing归并排序动画源码(含其他排序)

    在这个场景中,我们讨论的焦点是使用 Java Swing 来实现一个排序算法的动画展示,特别是归并排序。归并排序是一种高效的、稳定的排序算法,它的基本思想是将大问题分解为小问题来解决,通过递归地将两个或更多有序数...

    归并排序单步演示软件

    这个“归并排序单步演示软件”特别适合Java学习者,因为Java是实现归并排序的常见编程语言。在Java中,可以使用内置的数据结构如ArrayList或者数组来存储和操作数据,同时利用递归函数实现算法逻辑。 标签中的...

    外排序之多路归并的java实现

    外排序--基于败者树的多路归并排序算法的java实现

    [Java算法-排序]归并排序.java

    该资源提供了一份全面的指南,介绍了如何在Java中实现归并排序。文档中涵盖了归并排序的基本概念,包括如何对数组进行排序以及如何在Java中实现归并排序。此外,文档还包括一个逐步指南,介绍如何在Java中实现归并...

    JAVA排序大全 冒泡 快速 选择 归并排序

    JAVA排序大全 冒泡 快速 选择 归并排序

    java算法——归并排序

    归并排序 在排序前,先建好一个长度等于原数组长度的临时数组

    可视化归并排序

    本项目使用了Java编程语言,结合了归并排序算法和Swing库来创建一个可运行的程序,让用户能够观察到数据如何在排序过程中被逐步整合。 归并排序是一种分治策略的典型应用。它将一个大问题分解成小问题,然后分别...

    java版冒泡排序,插入排序,堆排序,快速排序,归并排序,希尔排序,桶排序

    它将数组分为两半,分别对左右两半进行归并排序,然后再合并这两个已排序的子数组。Java中,可以使用两个辅助数组来辅助排序和合并的过程。 6. **希尔排序(Shell Sort)**: 希尔排序是插入排序的一种优化版本,...

Global site tag (gtag.js) - Google Analytics