`
cuitongxin
  • 浏览: 27268 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAVA数据结构与算法 之 归并排序

 
阅读更多

JAVA版本的归并排序算法如下

请大家指正,谢谢!

/**
 * User: cuitongxin
 * Date: 13-3-31
 */
public class MergeSort {

    public static int[]  a = {13,67,32,9,43,1,19,7,52,89,73,0,10,60,99,30};

    public static void main(String[] args) {

        int[] temp = new int[a.length];

        mergeSort(a,temp,0,a.length-1);

        System.out.println(Arrays.toString(a));

    }

    /**
     * 归并排序主算法
     * @param a 需要归并排序的数组
     * @param temp 归并排序的临时数组,用户存放排序前的分组数组数据
     * @param startIndex 数组的开始索引
     * @param endIndex 数组的结束索引
     */
    private static void mergeSort(int[] a, int[] temp, int startIndex, int endIndex) {
        //数组中的元素大于1个时开始排序
        if (startIndex < endIndex) {
            //确定分组的中间元素索引位置
            int middle = (startIndex + endIndex) / 2 ;
            //对分组后的左边组进行归并排序
            mergeSort(a,temp,startIndex,middle);
            //对分组后的右边组进行归并排序
            mergeSort(a,temp,middle+1,endIndex);
            //合并已排序好的两个组,形成一个有序组
            merge(a, temp, startIndex, middle, endIndex);
        }
    }

    /**
     * 合并算法
     * @param a 用户存放排序号的数据
     * @param temp 用于存放分组数组
     * @param startIndex 数组的整个起始索引
     * @param middle     数组的中间索引
     * @param endIndex   数组的结束索引
     */
    private static void merge(int[] a, int[] temp, int startIndex, int middle, int endIndex) {

        //把原数据放入临时数组中
        for (int i=0; i<a.length;i++){
            temp[i] = a[i];
        }

        int left = startIndex; //左边分组的起始索引
        int right = middle + 1;  // 右边分组的起始索引
        int index = startIndex;  //合并后数组的起始索引

        //对左边分组和右边分组进行循环比较
        while ((left <= middle) && (right <= endIndex)) {
            //如果左边分组当前的元素大于右边分组则把右边分组的元素放入排序好的数组中,else 执行相反操作
            if (temp[left] > temp[right]) {
                a[index++] = temp[right++];
            } else {
                a[index++] = temp[left++];
            }
        }

        //如果分组比较大小完成之后,发现左边组还有数据,则把左边组的数据复制到排序好的数组中
        while (left <= middle) {
            a[index++] = temp[left++];
        }

        //如果分组比较大小完成之后,发现右边组还有数据,则把左边组的数据复制到排序好的数组中
        while (right <= endIndex) {
            a[index++] = temp[right++];
        }
    }
}

 

3
7
分享到:
评论

相关推荐

    java数据结构与算法.pdf

    Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点进行详细解释。 1. **数据结构**: - **稀疏数组**:当大量数据中大部分为零或...

    Java数据结构和算法.pdf

    资源摘要信息是关于Java数据结构和算法的知识点总结,涵盖了数组、栈与队列、链表、递归、哈希表、高级排序、二叉树、红黑树、堆、带权图等数据结构和算法概念。 一、数组 * 数组是相同类型变量的集合,可以使用...

    java数据结构排序算法之归并排序详解

    Java数据结构排序算法之归并排序详解 Java数据结构排序算法之归并排序是基于合并的思想,将两个或两个以上有序表合并成一个新的有序表。这种方法被称作是2-路归并排序(基本操作是将待排序列中相邻的两个有序子...

    C、C++、JAVA数据结构与算法电子书

    数据结构与算法是计算机科学的基础,对于理解和编写高效软件至关重要。C、C++和Java都是广泛使用的编程语言,它们在处理数据结构和算法时各有特点。以下是对这三种语言在数据结构与算法方面的一些关键知识点的详细...

    Java数据结构和算法中文第二版_Java数据结构_

    4. **排序与查找**:包括经典的排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等)和查找算法(线性查找、二分查找)。这些是任何程序员都应该掌握的基础知识。 5. **树结构**:书中会详细...

    Java 数据结构与算法+源代码 高清版

    这份“Java数据结构与算法+源代码高清版”资源旨在帮助开发者深入理解并掌握这些关键概念。 首先,让我们来探讨数据结构。数据结构是组织和存储数据的方式,它为算法提供了基础。常见的数据结构包括数组、链表、栈...

    Java数据结构和算法中文第二版

    根据提供的信息,“Java数据结构和算法中文第二版”这本书主要关注的是数据结构与算法的相关内容。下面将基于这些信息,详细介绍数据结构与算法的核心概念、重要性和应用领域,以及在Java编程环境中如何实现这些概念...

    Java数据结构和算法(第二版)+源代码+Applets

    Java数据结构和算法是计算机科学中的核心概念,对于任何Java开发者来说,理解和掌握它们都是至关重要的。本资源包“Java数据结构和算法(第二版)+源代码+Applets”为学习者提供了一个全面且深入的学习平台,涵盖了...

    数据结构与算法代码详解JAVA版

    在Java中,我们可以使用各种算法来解决实际问题,例如排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等)、查找算法(顺序查找、二分查找、哈希查找)以及图论中的最短路径算法(Dijkstra算法...

    Java数据结构和算法-带书签目录扫描版

    《Java数据结构和算法-带书签目录扫描版》是一本深入探讨Java编程语言中数据结构和算法的书籍。此扫描版特别包含了完整的书签目录,使得读者在电子版阅读时能够快速定位到所需章节,提高了学习和查阅的效率。 在...

    Java数据结构和算法(第二版)+随书源代码+applet小程序

    《Java数据结构和算法(第二版)》是一本专为希望深入理解Java编程中的数据结构与算法的读者设计的书籍。这本书的特点是从基础知识逐步引导读者进入复杂领域,通过结合实际的Applet小程序,使得理论知识变得生动直观。...

    【超全!】图解Java数据结构和算法(共195集)【资料+视频+课件+代码+笔记】

    稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、...

    java 数据结构与算法视频

    Java 数据结构与算法是计算机科学的核心部分,它们是编写高效、优化代码的基础。在这个视频教程中,我们将深入探讨这些关键概念,以便提升你的编程技能。数据结构是存储和组织数据的方式,而算法则是解决问题或执行...

    数据结构与算法(Java语言版)含有源码

    本资源包含两部分:一本名为“数据结构与算法(JAVA语言版)”的PDF教程和一个“源码.zip”压缩包,提供了相关的Java实现。 1. 数据结构:数据结构是组织和存储数据的方式,它直接影响到算法的效率。常见的数据结构...

    《Java数据结构和算法》学习笔记(2)——4种简单排序算法

    在编程领域,掌握数据结构和算法是提升编程能力的关键步骤,尤其是在Java这样的高级语言中。本文将深入探讨四种简单的排序算法:插入排序、冒泡排序、选择排序。这些算法虽然在复杂度上不如高级排序算法如快速排序或...

    JAVA数据结构和算法+面试题

    阅读《Java数据结构和算法 第二版》和解答《JAVA经典算法40题》可以帮助你深入理解和实践。同时,《JAVA面试题》提供了真实的面试场景,让你提前熟悉可能遇到的问题,提高应试能力。 总之,Java数据结构和算法是...

    Java数据结构和算法(第二版),算法经典案例(C语言)

    《Java数据结构和算法(第二版)》与《算法经典案例(C语言)》这两本书是IT领域的宝贵资源,尤其对于初学者和希望在面试中脱颖而出的开发者来说,它们提供了深入理解数据结构和算法的基础。数据结构是编程的核心,它...

Global site tag (gtag.js) - Google Analytics