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

归并排序的一例子

 
阅读更多
public class MergeSort {
	public static void mergeSort(int[] data) {
		System.out.println("开始排序:");
		sort(data, 0, data.length - 1);
	}

	/*
	 * 将索引从left到right范围的数组元素进行归并排序 data 待排序数组 left 待排序数组的第一个元素索引 right
	 * 待排序数组的最后一个元素索引
	 */
	private static void sort(int[] data, int left, int right) {
		// TODO Auto-generated method stub
		if (left < right) {
			// 找出中间索引
			int center = (left + right) / 2;
			// 对左边数组进行递归
			sort(data, left, center);
			// 对右边数组进行递归
			sort(data, center + 1, right);
			// 合并
			merge(data, left, center, right);

		}
	}

	/*
	 * 将两个数组进行归并,归并前两个数组已经有序,归并后依然有序 data 数组对象 left 左数组的第一个元素的索引 center
	 * 左数组的最后一个元素的索引,center+1是右数组第一个元素的索引 right 右数组的最后一个元素的索引
	 */
	private static void merge(int[] data, int left, int center, int right) {
		// TODO Auto-generated method stub
		int[] tmpArr = new int[data.length];
		int mid = center + 1;
		// third记录中间数组的索引
		int third = left;
		int tmp = left;
		while (left <= center && mid <= right) {
			// 从两个数组中取出最小的放入中间数组
			if (data[left]<=(data[mid])) {
				tmpArr[third++] = data[left++];
			} else {
				tmpArr[third++] = data[mid++];
			}
		}
		// 剩余部分依次放入中间数组
		while (mid <= right) {
			tmpArr[third++] = data[mid++];
		}
		while (left <= center) {
			tmpArr[third++] = data[left++];
		}
		// 将中间数组中的内容复制回原数组
		while (tmp <= right) {
			data[tmp] = tmpArr[tmp++];
		}
		System.out.println(Arrays.toString(data));
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] data = {1,33,12,10,8,0,89,100,20,23,98};
		System.out.println("排序之前:\n" + Arrays.toString(data));
		mergeSort(data);
		System.out.println("排序之后:\n" + Arrays.toString(data));
	}

}

 

分享到:
评论

相关推荐

    归并排序C++实现的例子

    归并排序(Merge Sort)是一种高效的排序算法,其主要基于分治法(Divide and Conquer)的思想。在C++中实现归并排序,我们需要理解以下几个关键知识点: 1. **分治法**:分治法是计算机科学中常用的一种算法设计...

    归并排序,基数排序算法比较

    在这个例子中,`mergeSort()`函数实现了归并排序,通过递归地将序列一分为二,直到每个子序列只剩下一个元素,然后调用`merge()`函数进行合并操作。归并排序的优点是稳定性,即相等的元素在排序后的相对位置不会改变...

    Java实现归并排序

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

    归并排序VS2010代码

    这个例子展示了如何在C++中实现归并排序的基本框架,包括递归分解和合并操作。在实际编程中,可以根据具体需求进行调整,例如优化内存管理或处理不同类型的数据结构。 总之,归并排序是一种高效稳定的排序算法,...

    简单易懂实现的归并排序

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

    merge(归并排序)

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

    [算法]快速排序,归并排序,堆排序的数组和单链表实现 数组和链表.pdf

    归并排序是一种常用的排序算法,它的时间复杂度为O(nlogn)。归并排序的基本思想是将数组分成两个部分,然后将这两个部分分别排序,最后将两个排序好的部分合并成一个有序的数组。 堆排序是一种常用的排序算法,它的...

    归并排序_排序_

    归并排序(Merge Sort)是一种基于分治策略的高效排序算法。在计算机科学中,它被广泛用于数据处理和管理,特别是在需要稳定性和高效率的排序场景。C#作为一种面向对象的编程语言,提供了丰富的工具和库来实现各种...

    Python3实现归并排序(源代码)

    在这个例子中,我们首先定义了一个 `merge_sort` 函数来执行归并排序的主要流程,它通过递归调用自身来分解数组,直到每个子数组只包含一个元素。接着,定义了 `merge` 函数来合并两个已排序的子数组。最后,我们...

    SCAU-8645归并排序.docx

    在这个SCAU-8645归并排序的例子中,我们看到了一个完整的C++实现。 首先,我们从代码的`#include`部分可以看到,这个程序使用了C++的标准库,包括`iostream`(输入输出)、`cstring`(字符串操作)、`algorithm`...

    归并排序算法

    在算法设计与分析课程中,归并排序是一个典型的例子,用来讲解分治法和递归的思想。通过分析归并排序,学生能够理解和掌握如何将复杂问题分解成更小的子问题,以及如何通过合并子问题的解来得到原问题的解。此外,...

    归并排序介绍和java代码实现

    归并排序是一种高效的排序算法,基于分治策略。它的核心思想是将大问题分解为小问题,然后逐一解决,最后将结果合并。在归并排序中,这个过程体现在将一个大数组不断分为两个子数组,直到每个子数组只有一个元素,...

    02-F1 归并排序1

    归并排序是一种高效的排序算法,属于分治策略的典型应用,其主要思想是将大问题分解为小问题来解决,最终再将小问题的结果合并,从而得到整个大问题的解。该算法的时间复杂度在所有情况下都能保持为O(nlogn),这得益...

    第6课 统计数字——归并排序(count)-2020.04.11.pdf

    - 文档中提到的编程练习涉及各种基于排序的问题,如成绩排序、奖学金分配等,这些都是理解和运用归并排序的好例子。实际编程中,需要根据具体问题的特点,选择合适的排序算法。 总结,归并排序是一种高效的排序...

    归并排序LJ.pptx

    归并排序是一种经典的排序算法,基于“分治”策略。它的主要思想是将大问题分解成小问题,然后逐个解决这些小问题,最后再将解决好的小问题合并成最终的解决方案。在归并排序中,我们将一个无序的序列分割成若干个...

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

    在这个例子中,代码使用了`timsort`的思路,这是一种自适应的排序算法,结合了插入排序和归并排序的优点,能够处理部分有序的数据,性能上优于纯归并排序。但是,代码中并没有具体体现`timsort`的全部特性,例如它的...

    8645 归并排序(非递归算法) (SCAU习题).pdf

    这个例子展示了归并排序的过程,每次合并后数组的排序状态。首先,数组被分为两半并进行合并,然后继续对每个半边进行相同的处理,直到整个数组有序。 总的来说,非递归归并排序的关键在于设计合适的循环结构来模拟...

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

    在这个例子中,`ToMergeSort()` 方法可能实现了非递归归并排序。 3. **自然归并排序**: 自然归并排序是一种优化过的归并排序,主要应用于数据已经部分有序的情况。它不是简单地将数组一分为二,而是尝试找到数组...

    Java排序算法总结之归并排序

    归并排序是一种基于分治策略的高效排序算法,它的核心思想是将待排序的数据分成较小的子序列,分别对这些子序列进行排序,然后将排序好的子序列合并成一个大的有序序列。在Java中,我们可以使用递归的方式来实现归并...

    C语言 实现归并排序算法

    归并排序是一种高效的排序算法,基于分治策略。在C语言中实现归并排序,我们需要理解算法的基本原理和步骤。 1. **算法原理**: 归并排序将待排序的序列分成两个子序列,分别对这两个子序列进行排序,然后将两个已...

Global site tag (gtag.js) - Google Analytics