`

归并算法排序

 
阅读更多

归并算法排序

 

算法思想
  • 1.简单地将原始序列划分为两个子序列
  • 2.分别对每个子序列递归排序
  • 3.最后将排好序的子序列合并为一个有序的序列,即归并过程 


 

归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。

 

java 代码
 

/**
 * 内部排序算法之归并排序
 * 默认按照从小到大进行排序操作
 * @author 小浩
 * @创建日期 2015-3-27
 */
public class Test{
    public static void main(String[] args) {
   //需要进行排序的数组
    int[] array=new int[]{8,3,2,1,7,4,6,5};
     //输出原数组的内容
    printResult(array);
    //归并排序操作
    sort(array,0,array.length-1);
    //输出排序后的相关结果
    printResult(array);
    }
     
    /**
     * 归并排序
     * @param array
     */
    private static void sort(int[] array,int i,int j) {
        if(i<j)
        {
            int middle=(i+j)/2;
            //递归处理相关的合并事项
            sort(array,i,middle);
            sort(array,middle+1,j);
            merge(array,i,middle,j);           
        }
    }
 
 
    /**
     * 合并相关的数组内容
     * 同时使合并后的数组仍然有序
     * @param array
     * @param i
     * @param middle
     * @param j
     *  4 5 6     9 10 11
     *
     */
    private static void merge(int[] array, int i, int middle, int j) {
        //创建一个临时数组用来存储合并后的数据
        int[] temp=new int[array.length];
        int m=i;
        int n=middle+1;
        int k=i;
        while(m<=middle&&n<=j)
        {
            if(array[m]<array[n])
                temp[k++]=array[m++];
            else
                temp[k++]=array[n++];
        }
        //处理剩余未合并的部分
        while(m<=middle)
        {
            temp[k++]=array[m++];
        }
        while(n<=j)
        {
            temp[k++]=array[n++];
        }
        //将临时数组中的内容存储到原数组中
        while(i<=j)
        {
            array[i]=temp[i++];
        }
    }
 
 
    /**
     *                                       
     * 输出相应数组的结果
     * @param array
     */
    private static void printResult(int[] array) {
       for(int value:array)    
           System.out.print(" "+value+" ");
      System.out.println();
    }
 
    /**
     * 交换数组中两个变量的值
     * @param array
     * @param i
     * @param j
     */
    private static void swap(int[] array,int i,int j){
        int temp=array[i];
        array[i]=array[j];
        array[j]=temp;
    }
}

 

排序算法的基本概念的讲解

     时间复杂度:需要排序的的关键字的比较次数和相应的移动的次数。

     空间复杂度:分析需要多少辅助的内存。

     稳定性:如果记录两个关键字的A和B它们的值相等,经过排序后它们相对的位置没有发生交换,那么我们称这个排序算法是稳定的。

  • 大小: 779 KB
分享到:
评论

相关推荐

    二路归并算法排序

    "二路归并算法排序" 二路归并算法排序是归并排序的一种实现方式,通过将两个有序表合并成为一个更大的有序表来实现排序。该算法的基本思想是将原始数组分成两个小数组,分别对这两个小数组进行排序,然后将两个有序...

    快速排序算法以及归并算法

    根据给定的文件信息,我们将深入探讨两种经典的排序算法——快速排序和归并排序,并结合Java语言实现进行详细解析。 ### 快速排序算法 快速排序是一种高效的排序算法,采用分而治之的策略,其核心思想是选择一个...

    MATLAB实现插入排序、二分归并排序、归并排序.rar

    在本资源中,我们主要关注的是使用MATLAB编程语言实现三种经典的排序算法:插入排序、二分归并排序以及归并排序。这些算法是计算机科学基础中的重要组成部分,特别是在算法设计与分析领域。MATLAB是一种强大的数值...

    归并排序算法实现(排序算法系列1)

    归并排序是一种高效的、稳定的排序算法,由著名计算机科学家John W. Backus在1946年提出。它是基于分治策略的一种经典算法,适用于处理大量数据。在本系列的第一部分,我们将深入探讨归并排序的基本原理、实现过程...

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

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

    归并排序算法实现

    ### 归并排序算法实现详解 #### 一、引言 归并排序是一种经典的排序算法,采用分治法的思想,将待排序数组分为若干个子序列,这些子序列是已排序的,然后再按照一定的方式合并这些子序列得到最终排序后的数组。...

    C语言二路归并排序算法

    ### C语言二路归并排序算法 #### 概述 归并排序是一种高效的排序算法,其基本思想是采用分治法(Divide and Conquer),将一个数组分成两个子数组,然后递归地对这两个子数组进行排序,最后将两个有序的子数组合并...

    归并排序算法(计算机算法与分析)

    归并排序算法是一种高效稳定的排序方法,其基本思想源于分治法。该算法将一个大问题分解成两个或更多的小问题来解决,然后再合并这些小问题的解,从而得到最终的大问题的解。在归并排序中,我们将一个大的数组分割成...

    C++实现希尔、快速、堆排序、归并排序算法

    本文将详细介绍C++中实现的希尔排序、快速排序、堆排序和归并排序这四种经典排序算法。 希尔排序,由Donald Shell于1959年提出,是一种改进的插入排序。它的基本思想是通过设置一个增量序列,将待排序的元素按照...

    改进的归并排序算法

    归并排序(Merge Sort)是一种基于分治策略的高效排序算法。它的基本思想是将大问题分解成小问题,然后逐个解决小问题,最后再将解决好的小问题合并成解决大问题。在这个过程中,归并排序通常采用递归的方式来实现。...

    归并算法思想总结

    归并算法是一种典型的分治策略在排序领域的应用,其核心思想在于将一个大规模的问题分解成若干个较小的、容易解决的子问题,然后将这些子问题的解合并,得到整个问题的解。在归并排序中,这一策略体现得尤为明显。 ...

    快速排序与归并排序的算法比较实验报告

    **快速排序与归并排序算法比较实验报告** 在计算机科学中,排序算法是处理大量数据时不可或缺的一部分。这篇实验报告将深入探讨两种经典的排序算法——快速排序和归并排序,通过对它们在Java环境中的实现和性能测试...

    算法设计实验报告-快速排序和归并排序

    本实验旨在通过对两种经典排序算法——快速排序和归并排序的研究与实现,深入理解它们的基本原理、时间复杂度,并通过编程实践比较这两种算法在不同数据规模下的性能表现。 #### 二、快速排序 **1. 基本思想** ...

    算法设计-归并排序

    算法设计,给出归并排序的C++实现代码,并利用给随机数方式求运行时间

    C语言算法之归并排序C语言算法之归并排序

    - **稳定性**: 归并排序是稳定的排序算法,这意味着相等的元素在排序前后保持原有的相对顺序。 - **高效性**: 不管输入数据如何,归并排序始终能保持`O(n log n)`的时间复杂度。 - **适用范围**: 归并排序适用于各种...

    快速排序、归并排序等排序算法比较

    快速排序、归并排序、基数排序等排序算法比较,比较时间性能,采用C++语言实现。。。

    归并排序(Merge sort)(台灣譯作:合併排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

    归并排序(Merge Sort)是一种基于分治策略的高效排序算法,由计算机科学家John W. Backus于1945年提出。它的工作原理可以分为三个主要步骤:分解、解决和合并。 1. 分解:将原始数据序列分成两个相等(或接近相等...

    归并排序算法C语言版

    归并排序算法C语言版

    数据库系统实现-两阶段多路归并排序算法的C实现

    两阶段多路归并排序算法是一种常用于数据库管理系统中的高效排序方法。本文将深入探讨这个算法,并结合C语言的实现来阐述其工作原理。 首先,我们要理解什么是归并排序。归并排序是一种基于分治思想的排序算法,它...

Global site tag (gtag.js) - Google Analytics