`
128kj
  • 浏览: 604191 次
  • 来自: ...
社区版块
存档分类
最新评论

归并排序(JAVA)

阅读更多
并归排序:
将两个或两个以上的有序数组组合成一个新的有序数组,叫并归排序

排序过程
1、 设初始数组有n个数据,则可看成n个有序的子数组, 每个子数组长度为1;
2、 两两合并,得到n/2或n/2+1 个长度为2 或1 的有序子数组;
3、 再两两合并,…… 如此重复,直至得到一个长度为n 的有序数组为止。

下面是归并排序的一个简单的例子:

初始值 【49】 【38】 【65】 【97】 【76】 【13】 【27】



public class MergeSort {
    
    public static void sort(int[] arr) {
       //创建临时数组
        int[] tempArr =new int[arr.length];
        msort(arr, tempArr, 0, arr.length);
    }

   
    private static void msort(int[] arr, int[] tempArr, int first,int last) {
         if (first+1  < last) {
           
            int midpt = (last + first) / 2;
            msort(arr, tempArr, first, midpt);
            msort(arr, tempArr, midpt, last);

           
            if (arr[midpt - 1]<=arr[midpt])//如果前半部分与后半部分正好形成了顺序
                return;
           
            int indexA, indexB, indexC;//前半部分的索引,后半部分的索引,临时数组的索引

            indexA = first;
            indexB = midpt;
            indexC = first;

            while (indexA < midpt && indexB < last) {
                if (arr[indexA]<arr[indexB]) {
                    tempArr[indexC] = arr[indexA]; //copyto tempArr
                    indexA++; 
                } else {
                    tempArr[indexC] = arr[indexB]; //copyto tempArr
                    indexB++; 
                }
                indexC++; 
            }
            //copy the tail of the sublist that is not exhausted
            while (indexA < midpt) {
                tempArr[indexC++] = arr[indexA++]; 
            } while (indexB < last) {
                tempArr[indexC++] = arr[indexB++]; 
            }
           
             将临时数组的所有元素复制到原数组
            for (int i = first; i < last; i++)
                arr[i] = tempArr[i];
        }
    }

    public static void main(String[] args){
     int  a[]={100,7,10,19,56,25,12,7,17,21,-1,30,48};
     
      sort(a);
      for(int i:a)
        System.out.print(i+",");
   }
}
  • 大小: 37.1 KB
分享到:
评论

相关推荐

    java实现归并排序

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

    归并排序Java_归并排序_

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

    归并排序Java源代码

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

    Java实现归并排序

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

    外部归并排序Java实现

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

    自然归并排序java版

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

    java归并排序

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

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

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

    java实现归并排序代码

    归并排序 java实现归并排序

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

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

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

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

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

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

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

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

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

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

    归并排序单步演示软件

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

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

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

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

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

    排序算法全集锦(java代码实现)

    具体包括冒泡排序、简单选择排序、直接插入排序、希尔排序、归并排序以及快速排序等。每种排序算法都将通过具体的Java代码实现并加以解释,以便更好地理解其工作原理及应用场景。 #### 冒泡排序 冒泡排序是一种...

    java算法——归并排序

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

Global site tag (gtag.js) - Google Analytics