`
cuitongxin
  • 浏览: 27058 次
  • 性别: 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数据结构与算法中文版

    《Java数据结构与算法中文版》是一本深入探讨编程核心领域的书籍,主要针对Java程序员,旨在提升他们在数据处理和问题解决能力上的技能。这本书详细介绍了数据结构和算法的基础理论及其在Java语言中的实现,是Java...

    Java数据结构和算法.pdf

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

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

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

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

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

    Java数据结构与算法第二版源代码

    《Java数据结构与算法第二版源代码》是一个深入学习Java编程和算法的重要资源,它包含了丰富的实例和程序,旨在帮助开发者提升对数据结构和算法的理解与应用能力。在这个压缩包中,有两个主要的子文件:...

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

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

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

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

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

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

    JAVA数据结构与算法

    在编程领域,数据结构与算法是核心基础,对于任何编程语言,包括Java,理解并熟练掌握它们至关重要。本文将深入探讨Java中的数据结构与算法,旨在帮助开发者提升问题解决能力和程序设计技巧。 首先,我们来看数据...

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

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

    java数据结构与算法分析

    在编程领域,Java数据结构与算法分析是提升编程能力、优化程序效率的关键所在。本资料集专注于Java语言,深入探讨了各种数据结构和算法,旨在帮助Java开发者更好地理解和运用这些核心概念。 首先,数据结构是存储和...

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

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

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

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

    java数据结构与算法1

    在IT行业中,Java数据结构与算法是编程人员必备的基础知识,尤其对于提升软件开发效率和优化解决方案至关重要。这里我们主要探讨的是"java数据结构与算法1"的相关知识点,结合提供的压缩包文件,我们可以深入学习...

    Java数据结构与算法

    本资源“Java数据结构与算法”显然是一份专注于这个主题的宝贵资料,包含了对数据结构和算法的深入探讨。 数据结构是指在计算机中组织和存储数据的方式,它决定了我们如何高效地访问和修改数据。在Java中,常见数据...

    Java数据结构与算法(第二版)

    ### Java数据结构与算法(第二版) #### 数据结构概述 数据结构是计算机科学的一个核心概念,它主要关注如何在计算机程序中组织、管理和存储数据,以便可以高效地访问和修改这些数据。良好的数据结构选择能够极大...

    数据结构与算法分析(java版内含源代码)

    《数据结构与算法分析》是计算机科学领域的一本经典著作,尤其在Java版本中,它深入探讨了如何在Java编程语言中实现各种数据结构和算法。这本书不仅提供了理论知识,还通过提供源代码实例,帮助读者更好地理解和应用...

Global site tag (gtag.js) - Google Analytics