`
cuitongxin
  • 浏览: 26487 次
  • 性别: 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数据结构排序算法之归并排序详解

    主要介绍了java数据结构排序算法之归并排序,结合具体实例形式详细分析了归并排序的原理、实现技巧与相关注意事项,需要的朋友可以参考下

    Java数据结构与算法学习笔记之排序

    Java数据结构与算法学习笔记之排序 冒泡排序,选择排序,插入排序,希尔排序, 归并排序, 快速排序.

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

    Java数据结构和算法介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和管理数据以取得最优性能提供了深入浅出的讲解。全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和队列、链表、...

    尚硅谷Java数据结构与java算法(Java数据结构与算法).zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    java数据结构与算法第二版

    Java数据结构的类库 小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小...

    Java数据结构和算法

    (10)数据结构之红黑树(三)——删除操作 (11)排序算法(一)——冒泡排序及改进 (12)排序算法(二)——选择排序及改进 (13)排序算法(三)——插入排序及改进 (14)排序算法(四)——归并排序与递归...

    【尚硅谷】数据结构与算法(Java数据结构与算法).zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    随手笔记--数据结构与算法(Java)排序

    适用人群:本人文档是通过Java语言来编写数据结构中排序的算法,所以要具备一定Java编程基础。以及想要复习或者自学数据结构的小伙伴。 能学到什么:1.六个基础排序算法,分别是冒泡排序,选择排序,插入排序,希尔...

    java数据结构与算法.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    数据结构java版 排序算法

    总结的不错,值得一看 * 1.插入排序(直接插入排序、折半插入排序、希尔排序); * 2.交换排序(冒泡泡排序、快速排序); * 3.选择排序(直接选择排序、堆排序); * 4.归并排序; * 5.基数排序。

    Java数据结构与算法视频教程

    课程内容第一章: 数据结构与算法概述; 算法分析; 冒泡排序; 选择排序; 插入排序; 希尔排序; 归并排序;第二章: 快速排序; 排序稳定性分析; 顺序表; 链表;第三章: 栈; 队列; 符号表; 二叉查找树;第...

    java数据结构与算法学习.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    数据结构和算法.md

    小白日记之八种排序算法——八种排序算法:冒泡排序、选择排序、插入排序、希尔排序、基数排序、堆排序、归并排序、快排

    排序算法-数据结构 C Java

    计算机的应用领域越来越广,但由于计算机硬件的速度和存储空间的有限性,如何提高计算机速度并节省存储空间一直成为软件编制人员努力的方向,在众多措施中,排序操作成为程序设计人员考虑的因数之一,排序方法选择...

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

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

    韩顺平JAVA数据结构与算法,重点是算法!.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

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

    Java数据结构和算法中文第二版(1) Java数据结构和算法中文第二版(2) 【内容简介】 本书可帮助读者: 通过由基于JAVA的演示所组成的可视专题讨论来掌握数据结构和算法 学会如何为常见和不太常见的编程条件选择...

    数据结构与算法分析_Java语言描述(第2版)

    《数据结构与算法分析:Java语言描述(第2版)》是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。...

    Java数据结构与算法,笔试题,OJ.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

Global site tag (gtag.js) - Google Analytics