归并排序的时间效率为O(n * log n)
算法假设两个已有序的数组,将其归并成一个有序的数组(见merge函数)。算法将数组分为前后两部分,对这两部分递归调用归并排序,然后将这两部分再合并。
算法的空间效率不高,需要多耗费一倍的空间。
class Merge {
public static void main(String[] args) {
int[] a = {3,2,5,2,0,6,3,7};
sort(a,0,a.length);
print(a);
}
public static void sort(int[] a, int p1, int p3) {
if((p3-p1) <= 1) return; //判断是否不需要继续递归
int p2 = (p3 + p1)/2; //计算中间位置p2
sort(a,p1,p2); //将p1 ~ p2之间递归排序
sort(a,p2,p3); //将p2 ~ p3之间递归排序
merge(a,p1,p2,p3); //合并p1~p2,p2~p3
}
public static void merge(int[] a, int p1, int p2 ,int p3) {
int[] c = new int[p3 - p1];
int n = p1, m = p2, i = 0;
while(n< p2 && m<p3) {
if(a[n] < a[m]) c[i++] = a[n++];
else c[i++] = a[m++];
}
while(n < p2) c[i++] = a[n++];
while(m < p3) c[i++] = a[m++];
for(int j=0; j<c.length; j++) a[p1 + j] = c[j];
}
public static void print(int[] c) {
for(int i: c) System.out.print(i + " " );
System.out.println();
}
}
分享到:
相关推荐
归并排序是一种经典的排序算法,基于分治策略。在计算机科学中,分治法是一种将大问题分解为小问题来解决的方法。归并排序利用这一思想,将一个大数组拆分成两个或更多个小数组,分别对这些小数组进行排序,然后将...
归并排序(Merge Sort)是一种基于分治策略的高效排序算法,它的主要思想是将大问题分解成小问题,然后逐个解决小问题,最后再将解决好的小问题合并成解决大问题的答案。这种算法在计算机科学中有着广泛的应用,尤其...
本文将对快速排序、归并排序、堆排序等常见排序算法进行比较和分析,探讨它们的优缺点和适用场景。 首先, let's 看一下这些排序算法的时间复杂度和空间复杂度: | 排序算法 | 平均情况 | 最好情况 | 最坏情况 | ...
### 分治策略与归并排序 #### 一、分治策略概述 在计算机科学领域,分治(Divide and Conquer)是一种非常重要的算法设计思想。它的基本思想是将一个复杂的问题分解成两个或更多的相同或相似的子问题,直到最后子...
归并排序
本主题将深入探讨四种常见的排序算法:归并排序、快速排序以及与链表相关的排序方法。 首先,我们来讨论归并排序(Merge Sort)。这是一种基于分治策略的排序算法。归并排序将大问题分解为小问题,然后逐步合并这些...
15-归并排序.cpp
算法的实现----归并排序 数据结构中学过的 编起耍哈哈
Java常用排序算法-归并排序 归并排序是一种分治思想的排序算法,其基本思想是将待排序的数组分成若干个子序列,每个子序列都是有序的,然后再将子序列合并成一个有序的数组。这种算法的时间复杂度为O(n log n),...
归并排序(Merge Sort)是一种高效的、稳定的排序算法,它采用了分治法(Divide and Conquer)的设计理念。在Python中实现归并排序,我们可以将一个大问题分解为两个或多个相同或相似的小问题,然后分别解决这些小...
java代码-使用java解决java排序之-归并排序的问题的源代码 ——学习参考资料:仅用于个人学习使用!
6. 归并排序(Merge Sort):归并排序也是基于分治策略,将大数组分成两个小数组,分别排序后再合并。无论数据如何,归并排序的时间复杂度始终保持为O(n log n)。 7. 基数排序(Radix Sort):基数排序是一种非比较...
这个模板类可能包含了构造函数、析构函数、成员函数(如sort())等,其中sort()函数可能是实现排序的核心部分,它会先调用希尔排序对数组进行初步排序,然后利用归并排序进行最终的排序,以达到更快的排序速度和更好...
数据结构-归并排序 PPT文档
第28周-第02章节-Python3.5-归并排序 希尔排序.mp4
归并排序(Merge Sort)是一种基于分治策略的高效排序算法,它的主要思想是将大问题分解成小问题,然后逐个解决小问题,最后再将解决好的小问题合并成解决大问题的答案。这个过程可以形象地比喻为将两个已排序的列表...
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
**归并排序是一种高效的排序算法,它采用分治策略,将大问题分解成小问题来解决。在数据结构-归并排序的实验中,重点是理解和实现二路归并排序算法,以及递归地处理数组的拆分和归并过程。** ### 1. 算法原理 归并...
### 分治法与归并排序详解 #### 一、分治法概述 **分治法**(Divide and Conquer)是一种重要的算法设计方法,在计算机科学领域广泛应用。它通过将复杂问题划分为多个较小的子问题来解决问题,这些子问题彼此独立且...