`

归并排序

阅读更多

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

 

排序基本思想是:

      将序列每相邻两个数字进行归并操作(merge),形成floor(n/2)个序列,排序后每个序列包含两个元素,将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素,重复步骤2,直到所有元素排序完毕  

 

速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列

归并排序比堆排序稍微快一点,但是需要比堆排序多一倍的内存空间,因为它需要一个额外的数组

 

稳定           时间复杂度O(nlogn)   n大时较好


      
 

public class MergeSort {
	/**
	 * 静态方法功能:给一个给定的数组用归并排序法排序
	 * @param a:待排序数组
	 * @param begin:开始下标
	 * @param end:终止下标
	 */
	public static void mergeSort(int a[], int begin, int end)
	{
		if (begin < end)
		{
			int a1[] = new int[end - begin + 1];

			int begin0 = 0;

			int mid = (begin + end) / 2;

			mergeSort(a, begin, mid);

			mergeSort(a, mid + 1, end);

			int begin1 = begin;

			int begin2 = mid + 1;

			int end1 = mid;

			int end2 = end;

			for (int i = 0; i < a1.length; i++)
			{
				if (begin1 <= end1 && begin2 <= end2)
				{
					if (a[begin1] < a[begin2])
					{
						a1[begin0] = a[begin1];
						begin0++;
						begin1++;
					}
					else
					{
						a1[begin0] = a[begin2];
						begin0++;
						begin2++;
					}
				}
				else
					break;
			}

			if (begin1 <= end1)
			{
				for (; begin0 < a1.length; begin0++)
				{
					a1[begin0] = a[begin1];
					begin1++;
				}
			}
			else
			{
				for (; begin0 < a1.length; begin0++)
				{
					a1[begin0] = a[begin2];
					begin2++;
				}
			}

			// 将排好序的结果填回原数组
			for (int i = 0; i < a1.length; i++)
			{
				a[begin + i] = a1[i];
			}
		}
	}
	
	public static void main(String[] args) throws Exception {

		int[] a = { 49, 38, 65, 97, 76, 13, 27, 49 };

		mergeSort(a, 0, a.length - 1);

		for (int key : a) {
			System.out.format(" %d", key);
		}
	}

}

 

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

相关推荐

    归并排序Java_归并排序_

    归并排序是一种高效的排序算法,基于分治策略。在Java中实现归并排序,我们可以创建一个名为`MergeSort`的类来封装整个过程。归并排序的基本思想是将待排序的序列分成两个或更多的子序列,对每个子序列分别进行排序...

    C++实现归并排序

    【归并排序】是一种高效的排序算法,其基本思想源于分治法(Divide and Conquer)。归并排序通过不断地将数组划分为较小的子序列,然后对这些子序列进行排序,最后将排序好的子序列合并成一个完整的有序序列。在这个...

    归并排序算法实现

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

    C#排序算法之归并排序

    C#排序算法之归并排序 C#排序算法之归并排序是一种基于分治策略的排序算法,通过将数组分割成两个子数组,递归地对每个子数组进行排序,然后将两个有序的子数组合并成一个有序的数组。下面是对C#实现归并排序的详细...

    C语言分治法实现归并排序

    本文实例为大家分享了C语言实现归并排序的具体代码,供大家参考,具体内容如下 归并排序的基本思想: 将两个及其以上的有序表合并为一张有序表,把待排序序列通过分治法分为若干个有序子序列,然后每两个子序列合并...

    python编程实现归并排序

    归并排序是一种高效的、稳定的排序算法,其核心思想是“分而治之”。在Python中实现归并排序,我们可以分为以下几个步骤来理解: 1. **分割**:首先,我们需要将原始数组不断地分成两半,直到每个子数组只剩下一个...

    C#归并排序的实现方法(递归,非递归,自然归并)

    归并排序是一种高效的排序算法,基于分治策略。在C#中,归并排序可以通过递归、非递归以及自然归并三种方式实现。以下是这三种实现方法的详细解释: 1. **递归归并排序**: 递归归并排序是归并排序最直观的实现...

    归并排序算法.docx

    归并排序(Merge Sort)是一种基于分治策略的高效排序算法。它的基本思想是将待排序的序列分为两部分,分别对这两部分进行排序,然后将排好序的子序列合并成一个完整的有序序列。这一过程可以递归地进行,直到每个子...

    三路归并_C语言_三路归并排序_三路归并_

    **三路归并排序**是一种高效的排序算法,尤其在处理含有大量重复元素的序列时表现优秀。该算法基于归并排序的思想,但将其分为三个部分处理,而不是传统的两个部分。在本文中,我们将深入探讨三路归并排序的原理、...

    C语言演示对归并排序算法的优化实现

    归并排序是一种分治策略的排序算法,它的基本思想是将大问题分解成小问题来解决。在归并排序中,我们将一个大数组分成两个或更多个小数组,然后对每个小数组进行排序,最后将这些小数组合并成一个大的有序数组。这个...

    归并排序的实现代码与思路

    归并排序是一种基于分治策略的高效排序算法,它的核心思想是将大问题分解成小问题,然后分别解决小问题,最后将小问题的结果合并,得到大问题的解。在这个过程中,归并排序将待排序的序列不断地分成两半,直到每个子...

    归并排序 排序

    归并排序是一种基于分治策略的高效排序算法,它的核心思想是将大问题分解成小问题,逐个解决,然后再将结果合并,最终得到整个问题的解决方案。在归并排序中,这一过程主要分为三个步骤:分解、求解和组合。 1. **...

    归并排序_归并排序_

    归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案&quot...

    通过javascript实现归并排序.rar

    归并排序(Merge Sort)是一种经典的分治算法,它将一个数组分成两个子数组,分别对这两个子数组进行排序,然后再将两个已排序的子数组合并成一个完整的有序数组。压缩包文件代码是一个使用JavaScript实现归并排序的...

    归并排序(视频+代码)

    1,归并排序的概念 1.1,算法介绍 和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一...

    Java实现归并排序

    归并排序(Merge Sort)是一种基于分治策略的高效排序算法。它的基本思想是将待排序的元素序列分成两个或更多的子序列,分别对每个子序列进行排序,然后将排好序的子序列合并成一个有序序列。这个过程可以递归进行,...

    java归并排序

    归并排序是一种基于分治思想的高效排序算法,它的主要特点是将大问题分解为小问题来解决。在Java中实现归并排序,我们可以分别实现递归版和非递归版,这两种方法各有其特点和适用场景。 ### 1. 分治策略 归并排序...

    归并排序代码

    内部排序之归并排序的代码实现,代码风格简单 易于看懂

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

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

Global site tag (gtag.js) - Google Analytics