`
异步获取爱
  • 浏览: 80019 次
  • 性别: Icon_minigender_1
  • 来自: 大男子主义世界
社区版块
存档分类
最新评论

合并排序法

阅读更多
說明
之前所介紹的排序法都是在同一個陣列中的排序,考慮今日有兩筆或兩筆以上的資料,它可能是不同陣列中的資料,或是不同檔案中的資料,如何為它們進行排序?
解法
可以使用合併排序法,合併排序法基本是將兩筆已排序的資料合併並進行排序,如果所讀入的資料尚未排序,可以先利用其它的排序方式來處理這兩筆資料,然後再將排序好的這兩筆資料合併。

有人問道,如果兩筆資料本身就無排序順序,何不將所有的資料讀入,再一次進行排序?排序的精神是儘量利用資料已排序的部份,來加快排序的效率,小筆資料的排序較為快速,如果小筆資料排序完成之後,再合併處理時,因為兩筆資料都有排序了,所有在合併排序時會比單純讀入所有的資料再一次排序來的有效率。

那麼可不可以直接使用合併排序法本身來處理整個排序的動作?而不動用到其它的排序方式?答案是肯定的,只要將所有的數字不斷的分為兩個等分,直到最後剩一個數字為止,然後再反過來不斷的合併,就如下圖所示:



不過基本上分割又會花去額外的時間,不如使用其它較好的排序法來排序小筆資料,再使用合併排序來的有效率。

下面這個程式範例,我們使用快速排序法來處理小筆資料排序,然後再使用合併排序法處理合併的動作。

public class Sort {
    // number1、number2 必須排序過
    public static int[] merge(int[] number1, int[] number2) {
        int[] number3 = new int[number1.length + number2.length];
        
        int i = 0, j = 0, k = 0; 
        while(i < number1.length && j < number2.length) { 
            if(number1[i] <= number2[j]) 
                number3[k++] = number1[i++]; 
            else 
                number3[k++] = number2[j++]; 
        } 

        while(i < number1.length) 
            number3[k++] = number1[i++]; 
        while(j < number2.length) 
            number3[k++] = number2[j++];
        
        return number3;
    }
}
分享到:
评论

相关推荐

    C经典算法之合并排序法

    本篇文章将介绍一种经典的排序算法——**合并排序法**(Merge Sort),并通过C语言实现该算法。合并排序是一种非常有效的排序方法,其核心思想是分治法:将数据分为若干个子集,对这些子集分别进行排序,最后将排序...

    合并排序算法——merge sort

    /************合并排序算法的实现******************/ int main() { int p,q,r; printf("合并排序算法的实现:\n"); printf("请输入p、q、r的值(输入格式1,12,13):"); scanf("%d,%d,%d",&p,&q,&r); printf("p=%...

    Strassen矩阵乘法和棋盘覆盖和自然合并排序算法

    Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘覆盖和自然合并排序算法Strassen矩阵乘法和棋盘...

    自底向上合并排序算法

    自底向上的合并排序是一种基于分治思想的高效排序算法,它的主要特点是通过逐步合并小规模的有序序列来构建大规模的有序序列。这种算法避免了传统合并排序在处理大规模数据时需要额外空间的问题,因为它是从最小的...

    合并排序算法

    合并排序是一种高效的排序算法,采用分治策略来实现。它将待排序的数据序列分为若干个子序列,每个子序列都是已有序的;然后再按照一定的规则,将这些子序列合并为整体排序后的序列。合并排序的时间复杂度为O(nlogn)...

    自然合并排序算法

    自然合并排序算法,对合并排序算法进行进一步的优化

    合并排序算法的C语言实现

    合并排序算法的C语言实现,在VC开发环境下验证通过

    合并排序算法C语言源程序.zip

    合并排序是一种高效的、基于分治思想的排序算法。在C语言中实现合并排序,我们可以深入理解这个算法的原理,以及如何用C语言来编写代码。本文将详细探讨合并排序算法的理论基础,C语言实现的关键步骤,以及如何验证...

    分治法合并排序算法实现merge

    在本案例中,我们将讨论如何利用分治法实现合并排序(Merge Sort),这是一种效率较高的排序算法,其时间复杂度为O(n log n)。 合并排序的基本思想是将原始数组分为两个相等(或接近相等)的部分,对每一部分分别...

    一种快速的排序法—插入合并排序法

    本文介绍的插入合并排序法是一种结合了插入排序和合并排序优点的新型内排序算法,它既保持了插入排序在小规模数据集上的高效性,又具备合并排序对于大数据量处理时的良好性能。 #### 引言 排序在计算机应用中占据...

    合并排序算法的代码实现

    合并排序(Merge Sort)是一种基于分治策略的高效排序算法,它的主要特点是稳定且具有较高的时间效率。在本文中,我们将深入探讨合并排序的工作原理、Java实现细节以及其优势和适用场景。 ### 合并排序的基本思想 ...

    合并排序算法和二分搜索技术算法的实现实验报告.doc

    合并排序算法和二分搜索技术算法的实现实验报告.doc

    合并排序(分治策略)报告.doc

    【合并排序(分治策略)】是一种高效的排序算法,它采用了经典的分治思想。分治法的基本策略是将一个难以直接解决的大问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题,再将子问题的解组合得到原问题...

    合并排序算法(本地交换)的C语言实现

    合并排序的合并算法一般是异地交换,本文件通过本地交换和异地交换两种方式实现了合并排序,在VC开发环境下验证通过

    c++合并排序算法递归与非递归方式

    c++实现的合并排序算法 用递归和非递归两种方式实现的

    合并排序算法 C 语言 visio studio2010

    合并排序算法是一种高效的排序算法,基于“分治”策略,由计算机科学家John W. Hoare在1960年提出。这种算法将一个大问题分解为小问题来解决,然后将小问题的解合并,得到原问题的解。在排序过程中,合并排序将一个...

    合并排序的c++实现程序

    合并排序是一种高效的、基于分治思想的排序算法。在C++中实现合并排序,我们可以将大问题分解为小问题,然后逐步解决,最终合并结果。这个程序的核心在于理解分治策略,并能熟练运用C++的编程语法。 首先,我们要...

    合并排序算法非递归形式源码

    在非递归形式的合并排序中,我们不使用递归调用来实现,而是通过循环结构来逐步完成排序。这种实现方式对于内存有限或处理大数据量的情况尤其有用,因为它避免了递归可能导致的栈溢出问题。 下面是一个简化的非递归...

    合并排序算法,快速排序算法,递归,分治

    合并排序是一种基于分治策略的排序算法。其基本思想是将大问题分解成小问题来解决,然后将小问题的解合并成原问题的解。具体步骤如下: 1. **分解**:将待排序的序列分为两个子序列,每个子序列包含大约一半的元素。...

Global site tag (gtag.js) - Google Analytics