合并排序
合并算法,指的是将两个已经排序的序列合并成一个序列的操作
操作步骤:
1. 建立一个数组C用来存放合并后的数
2. 从数组A和数组B的首端开始比较,将大的元素放入C中
3. 重复2操作,直至其中一个数组的元素被用完,则将另一个数组中剩余的元素拷贝到C中
比较复杂度:n㏒n
交换(赋值)复杂度:n㏒n
优点:比较快速的排序算法
缺点:需要额外的空间存放临时数组
private static void merge(Integer[] array,final int left,final int leftEnd, final int rightEnd){
Integer[] mergeResult = new Integer[rightEnd-left+1];
int i = 0; //mergeResult的下标
int j = left; //left 的下标
int k = leftEnd+1; //right 的下标
//将两个数组中较小的元素拷贝到mergeResult中
while(j<=leftEnd&&k<=rightEnd){
if(array[j]<array[k]){
mergeResult[i++] = array[j++];
}else{
mergeResult[i++] = array[k++];
}
}
//将另一个数组中剩余的元素拷贝到mergeResult中
while(j<=leftEnd){
mergeResult[i++] = array[j++];
}
while(k<=rightEnd){
mergeResult[i++] = array[k++];
}
//copy mergeResult to array
int leftPos = left;
for(int m=0;m<mergeResult.length;m++,leftPos++){
array[leftPos] = mergeResult[m];
}
}
private static void mergeSort(Integer[] array,final int left,final int leftEnd, final int rightEnd){
if(left>=rightEnd){
return;
}
mergeSort(array,left,(left+leftEnd)/2,leftEnd);
mergeSort(array,leftEnd+1,(leftEnd+1+rightEnd)/2,rightEnd);
merge(array,left,leftEnd,rightEnd);
}
public static void mergeSort(Integer[] array){
mergeSort(array,0,(array.length)/2,array.length-1);
}
分享到:
相关推荐
全面的排序算法实现,包括插入排序、合并排序、堆排序、快速排序。 堆排序:HeapSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550701 插入排序:InSertion_Sort 讲解详见...
本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...
在本案例中,我们将讨论如何利用分治法实现合并排序(Merge Sort),这是一种效率较高的排序算法,其时间复杂度为O(n log n)。 合并排序的基本思想是将原始数组分为两个相等(或接近相等)的部分,对每一部分分别...
【合并排序(分治策略)】是一种高效的排序算法,它采用了经典的分治思想。分治法的基本策略是将一个难以直接解决的大问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题,再将子问题的解组合得到原问题...
合并排序是一种高效的、基于分治思想的排序算法。在C++中实现合并排序,我们可以将大问题分解为小问题,然后逐步解决,最终合并结果。这个程序的核心在于理解分治策略,并能熟练运用C++的编程语法。 首先,我们要...
根据给定的文件信息,我们可以总结出以下关于“C经典算法之合并排序法”的相关知识点: ### 一、概述 本篇文章将介绍一种经典的排序算法——**合并排序法**(Merge Sort),并通过C语言实现该算法。合并排序是一种...
合并排序和快速排序是两种非常重要的排序算法,在计算机科学中占据着核心地位。它们都是基于分治策略(Divide and Conquer)设计的,能够高效地处理大量数据,广泛应用于各种场景,如数据库系统、数据分析、算法竞赛...
这里我们主要探讨两种经典的排序算法:快速排序和合并排序。 快速排序是一种分治算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是选取一个基准元素,将数组分为两部分,一部分的所有元素都小于或...
本文将深入探讨两种常见的排序算法:插入排序和合并排序,并基于一个长度为200000的数组进行性能比较。 **插入排序**是一种简单直观的排序算法,它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从...
合并排序是一种基于分治策略的高效排序算法,其基本思想是将大问题分解为小问题,然后逐个解决这些小问题,最后将解决方案合并,得到原问题的解答。在本章中,我们主要讨论了如何利用合并排序算法来对一个包含n个...
分治合并排序是一种基于分治策略的高效排序算法。分治法是计算机科学中解决问题的一种通用方法,它将一个大问题分解成若干个规模较小、相互独立、与原问题形式相同的子问题,然后分别解决子问题,最后将子问题的解...
自底向上的合并排序是一种基于分治思想的高效排序算法,它的主要特点是通过逐步合并小规模的有序序列来构建大规模的有序序列。这种算法避免了传统合并排序在处理大规模数据时需要额外空间的问题,因为它是从最小的...
例如,合并排序的实现可能涉及到动态内存分配、指针操作,而快速排序则需要理解如何使用指针进行数组元素的交换和分割。 在实际编码过程中,我们需要注意以下几点: 1. 递归深度限制:对于大规模数据,要警惕递归...
冒泡排序和合并排序是两种常见的排序算法,它们在计算机科学和编程中有着广泛的应用。在分析这两种排序方法时,时间复杂度是一个重要的衡量标准,它反映了算法执行效率的高低。 首先,我们来讨论冒泡排序。冒泡排序...
自然合并排序是对合并排序的非递归形式的一种改进,很好很有用
合并排序是一种高效的、基于分治思想的排序算法。在C语言中实现合并排序,我们可以深入理解这个算法的原理,以及如何用C语言来编写代码。本文将详细探讨合并排序算法的理论基础,C语言实现的关键步骤,以及如何验证...
合并排序是一种高效的排序算法,基于分治法(Divide and Conquer)的设计理念。在C#中实现合并排序,我们可以遵循以下步骤: 1. **理解合并排序算法**: 合并排序首先将原始数组分为两个子数组,分别对它们进行...
合并排序(Merge Sort)是一种基于分治策略的高效排序算法,它的主要特点是稳定且具有较高的时间效率。在本文中,我们将深入探讨合并排序的工作原理、Java实现细节以及其优势和适用场景。 ### 合并排序的基本思想 ...
/************合并排序算法的实现******************/ int main() { int p,q,r; printf("合并排序算法的实现:\n"); printf("请输入p、q、r的值(输入格式1,12,13):"); scanf("%d,%d,%d",&p,&q,&r); printf("p=%...
合并排序是一种基于分治策略的高效排序算法,它将大问题分解为小问题来解决,然后将小问题的结果合并以得到最终的解决方案。这个过程既可以用递归方式实现,也可以用非递归方式实现。 首先,让我们来看看递归版本的...