`
sunnymoon
  • 浏览: 90114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据结构与算法(JAVA篇)之递归算法(三)

阅读更多

<!----><!----><!----><!----><!----><!----><!---->

/**
 *
 * @author SunnyMoon
 */

/**
 * 概念介绍:
 * 
 * 归并排序:归并算法的中心是归并两个已经有序的数组,并且递归调用归并操作。
 * 
 * 归并排序优点和缺点:比简单排序在速度上快很多;归并排序会占用双倍的存储空间。
 * 
 * 归并排序的效率:归并排序的时间复杂度是 O(N*LogN);简单排序的复杂度是O(N2)。
 */
public class Recursion3 {

    private long[] theArray;
    private int nElems;

    public Recursion3(int max) {//初始化数组
        theArray = new long[max];
        nElems = 0;
    }

    public void insert(long value) {//插入数据
        theArray[nElems] = value;
        nElems++;
    }

    public void display() {//显示数组中的数据
        for (int j = 0; j < nElems; j++) {
            System.out.print(theArray[j]+","+" ");
        }
    }
    /**
     * 归并排序算法
     */
    public void mergeSort() {
        long[] workSpace = new long[nElems];//创建一个工作数组,用于排序操作使用
        recMergeSort(workSpace, 0, nElems - 1);//执行归并排序操作
    }
    
    /**
     * 递归分割数据到基本单位
     */
    private void recMergeSort(long[] workSpace, int lowerBound, int upperBound) {
        if (lowerBound == upperBound) {
            return;
        } else {
            int mid = (lowerBound + upperBound) / 2;
            recMergeSort(workSpace, lowerBound, mid);
            recMergeSort(workSpace, mid + 1, upperBound);
            merge(workSpace, lowerBound, mid + 1, upperBound);
        }
    }
    
    /**
     * 归并操作将基本单位归并成整个有序的数组
     */
    private void merge(long[] workSpace, int lowPtr, int highPtr, int upperBound) {
        int j = 0;
        int lowerBound = lowPtr;
        int mid = highPtr - 1;
        int n = upperBound - lowerBound + 1;

        while (lowPtr <= mid && highPtr <= upperBound) {
            if (theArray[lowPtr] < theArray[highPtr]) {
                workSpace[j++] = theArray[lowPtr++];
            } else {
                workSpace[j++] = theArray[highPtr++];
            }
        }
            while (lowPtr <= mid) {
                workSpace[j++] = theArray[lowPtr++];
            }
            while (highPtr <= upperBound) {
                workSpace[j++] = theArray[highPtr++];
            }
            for (j = 0; j < n; j++) {
                theArray[lowerBound + j] = workSpace[j];
            }
    }
    public void println(String str){
            System.out.println(str);
        }
}

class MergeSortApp {//主程序

    public static void main(String[] args) {
        int maxSize = 100;
        Recursion3 arr = new Recursion3(maxSize);
        /**
         * 插入值到数组
         */
        arr.insert(64);
        arr.insert(21);
        arr.insert(11);
        arr.insert(33);
        arr.insert(12);
        arr.insert(85);
        arr.insert(44);
        arr.insert(99);
        arr.insert(3);
        arr.insert(0);
        arr.insert(108);
        arr.insert(36);
        
        arr.println("显示排序前数据:");
        arr.display();
        arr.println("");  
        
        arr.mergeSort();
        
        arr.println("显示排序后数据:");
        arr.display();
        arr.println("");  
    }
}
/**
 * 
 * 显示排序前数据:
 * 64, 21, 11, 33, 12, 85, 44, 99, 3, 0, 108, 36, 
 * 显示排序后数据:
 * 0, 3, 11, 12, 21, 33, 36, 44, 64, 85, 99, 108,
 */

/**
 * 总结:
 * 归并排序比简单排序的效率高很多,把递归发挥的淋漓尽致,大家可以试一下。
 * 最后给出归并排序工作过程图解。
 */

 

    图1: 归并排序工作过程

 

   <!----><!----><!----> <!---->

 

2
0
分享到:
评论

相关推荐

    数据结构与算法(JAVA篇)之递归算法(二)

    ### 数据结构与算法(JAVA篇)之递归算法(二) #### 递归与二分查找 本文将探讨递归算法中的一个重要应用——二分查找,并对比递归与非递归两种实现方式。 ##### 递归的概念介绍 递归是一种算法设计策略,它...

    java数据结构与算法.pdf

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

    数据结构与算法(JAVA篇)之递归算法

    ### 数据结构与算法(JAVA篇)之递归算法 #### 概念介绍 递归算法是一种常见的编程技术,尤其在解决具有重复子问题的问题时非常有效。递归算法的特点是函数自身调用自身来解决问题的不同部分,直到达到基本情况...

    java数据结构递归算法

    在这个"java数据结构递归算法"主题中,我们将深入探讨递归的基本概念、如何在Java中使用递归,以及一个著名的递归应用案例——八皇后问题。 递归是函数或方法调用自身的过程。它基于一个问题的规模缩小至基本情况,...

    数据结构与算法分析(Java语言描述)习题答案(第三版).docx

    在《数据结构与算法分析(Java语言描述)》(第三版)这本教材中,我们看到涉及了关于数据结构、算法以及程序设计的基础概念。在给出的文档中,部分题目和答案涵盖了递归、数学推理、文件处理以及计算理论等多个方面...

    数据结构与Java算法第四版

    《数据结构与Java算法第四版》是一本以Java为编程语言的教科书,适用于系统学习数据结构和算法的基本原理与应用。这本书特别关注于数据结构与算法的设计、分析和实现过程。在IEEE/ACM 2001计算机科学课程标准框架下...

    数据结构与算法JAVA版

    本资料包“数据结构与算法JAVA版”聚焦于这个核心主题,包含了用Java实现的各种数据结构和算法。 1. **数据结构**: - **数组**:是最基本的数据结构,提供了固定大小的存储空间,通过索引访问元素。Java中的数组...

    数据结构与算法(java版)

    数据结构与算法是计算机科学的基础,对于理解和解决复杂问题至关重要。在Java环境下,这些概念的实现使得程序设计更加高效和优化。以下将详细介绍标题和描述中提到的关键知识点: 1. **栈与队列**: - 栈(Stack)...

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

    以下是对这三种语言在数据结构与算法方面的一些关键知识点的详细阐述: 1. **数据结构**: - **数组**:基本的数据结构,用于存储同类型元素的集合。C、C++中的数组是静态的,大小在声明时确定,而Java中的数组...

    数据结构与算法java版

    ### 数据结构与算法Java版:深入理解编程基石 #### Java与面向对象程序设计:奠定编程基础 在《数据结构与算法Java版》一书中,Java作为面向对象编程语言的典范,其基础知识和面向对象特性被详尽阐述。从基本数据...

    Java数据结构和算法.pdf

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

    数据结构与算法java版-不是很高清,不过还算全

    "数据结构与算法java版"这个资源虽然清晰度不高,但内容较为全面,涵盖了数据结构和算法的核心概念。 1. **数据结构**:数据结构是指在计算机中组织和存储数据的方式,它允许我们以高效的方式访问和修改数据。主要...

    数据结构与算法Java语言描述 部分代码实现

    本资源提供了"数据结构与算法Java语言描述 第二版 部分代码实现",这意味着你将能够学习到如何使用Java来实现各种数据结构和算法。 1. **数组**:数组是最基本的数据结构,它允许存储固定大小的同类型元素集合。在...

    数据结构与算法Java语言描述(源代码)

    本资源提供了"数据结构与算法Java语言描述(源代码)",帮助学习者通过实际代码深入理解这些概念。 1. **数组**:数组是最基本的数据结构,它允许存储固定数量的相同类型元素。在Java中,数组可以是一维、二维或...

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

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

    数据结构与算法经典问题解析 java语言描述 原书第二版

    《数据结构与算法经典问题解析 Java语言描述》第二版是一本深入探讨计算机科学核心领域的书籍,专注于使用Java语言来阐述和实现数据结构和算法。这本书是程序员和计算机科学学生的宝贵资源,因为它涵盖了从基础到...

    数据结构与算法(JAVA语言版解密)

    本书《数据结构与算法(JAVA语言版解密)》详细介绍了数据结构和算法的基本概念,以及如何使用Java语言实现这些数据结构和算法。书中内容涵盖了面向对象程序设计的基础知识、数据结构与算法的核心理论、以及各类数据...

    数据结构与算法分析Java3rd英文_数据结构与算法分析_

    数据结构与算法分析是计算机...通过阅读《数据结构与算法分析Java3rd英文》这本书,你可以深入理解这些概念,并学习如何在Java中有效地应用它们。这本书会涵盖各种示例和练习,帮助读者巩固理论知识并提高实践技能。

Global site tag (gtag.js) - Google Analytics