归并排序思想:
以空间换取时间,不断地来回复制并且排序两个有序序列,直到排序完成。
递归到最底层后,可知道有序序列长度大小初始值为1,然后开始往回递归。
时间复杂度介于O(N)和O(N*logN)之间,空间复杂度O(N),是一种渐进最优算法。
这里采用的是分治策略。关于分治与递归,是比较有用的算法。
/**
* MergeSort.java 归并排序
*
* @author Administrator
*
*/
public class MergeSort {
public static void mergeSort(int[] a) {
int[] b = new int[a.length];
mSort(a, b, 0, a.length-1);
}
public static void mSort(int[] a, int[] b, int left, int right) {
if (left < right) { // 至少要有两个元素
int i = (left + right) / 2; // 取中点.
mSort(a, b, left, i);
mSort(a, b, i+1, right);
Util.merge(a, b, left, i, right); // 合并数组元素a[left:i]和a[left+1:right]至b[left:right]中.
Util.copy(a, b, left, right); // 把数组元素 b[left:right] 复制到 a[left:right]
}
}
public static void main(String[] args) throws Exception {
if (args.length == 0) {
System.out.println("请输入数字以空格隔开");
System.exit(-1);
}
int[] a = new int[args.length];
for (int i = 0; i < args.length; i++)
a[i] = Integer.parseInt(args[i]);
mergeSort(a);
// 输出排序后的数组元素。
for (int i = 0; i < a.length; i++)
System.out.println(a[i]);
}
}
消除递归的合并排序:
http://thingkau.iteye.com/blog/235829
分享到:
相关推荐
直接插入排序 选择排序 堆排序 归并排序 快速排序 冒泡排序等七种排序方法
数据结构排序选择排序归并排序基数排序PPT学习教案.pptx
本文将深入探讨四种常见的排序算法:快速排序、归并排序、冒泡排序和选择排序。这些算法不仅在理论上有其重要性,而且在实际编程项目中也经常被用到。 ### 快速排序 快速排序是由英国计算机科学家C.A.R. Hoare提出...
本文将深入探讨三种常见的高效排序算法:堆排序、快速排序和归并排序。它们都是基于不同的原理和策略,具有各自的优势和适用场景。 首先,堆排序是一种基于比较的排序算法,利用了二叉堆的数据结构。二叉堆是一个...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
//排序类 提供int排序的静态方法 有以下排序: 快速排序 堆排序 计数排序 桶排序 归并排序
采用c++描述了各种排序算法,包括选择排序 冒泡排序 插入排序 基数排序 快速排序 归并排序 。实验内容 1、创建排序类。 2、提供操作:选择排序、冒泡排序、插入排序、*基数排序、*快速排序、*归并排序。 3、*能够...
### 归并排序详解 #### 一、归并排序简介 归并排序是一种采用分治策略的高效排序算法。其核心思想是将待排序数组分为若干子数组,这些子数组是已排序的,在合并这些子数组的过程中得到完全排序的数组。这种排序...
自己写的三个排序算法的比较。快速排序、归并排序、简单排序 对三个排序算法所消耗时间进行统计,比较时间效率 程序是在Linux下用C写的,vc下并未做测试。
选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用
本资源包含了几种常见的排序算法,包括堆排序、选择排序、冒泡排序、归并排序和插入排序。这些排序算法各有特点,适用于不同的场景,并且在理解它们的工作原理后,能够帮助初学者更好地掌握编程基础。 1. **堆排序*...
快速排序、归并排序、基数排序等排序算法比较,比较时间性能,采用C++语言实现。。。
数据结构课件:第10章 排序2选择排序归并排序基数排序.pptx
希尔排序、归并排序、桶排序、堆排序和快速排序都是经典的计算机算法,主要用于对数据进行排序。在C++编程语言中,这些排序算法的实现是程序员必须掌握的基础技能之一。接下来,我们将深入探讨这些排序算法的工作...
这里我们汇总了七种常见的排序算法:Shell排序、归并排序、选择排序、快速排序、堆排序、冒泡排序和插入排序。每种算法都有其独特的特点和适用场景,下面将逐一详细介绍。 1. **Shell排序**:由Donald Shell提出,...
printf("\t6: 归并排序\n"); printf("\t7: 希尔排序\n"); printf("\t***************************\n"); scanf("%d",&i); //输入整数1-7,选择排序方式 switch (i){ case 1: InsertSort(R); break; //值为1,...
本文主要介绍了五种内部排序算法:插入排序、交换排序、选择排序、归并排序和基数排序。 1. **插入排序**: 插入排序的基本思想是从未排序的序列中取出一个元素,然后将其插入到已排序序列的正确位置,以保持序列...
- 在C#中,归并排序通常用递归实现,通过两个辅助数组进行合并操作。 7. **基数排序**(Radix Sort): - 基数排序不是比较型排序,而是利用数字的位数进行排序。从低位到高位,对每个位数进行一次分配排序,如桶...
本篇将详细介绍标题所提及的四种排序算法:Shell排序、快速排序、归并排序以及堆排序。 1. **Shell排序**: Shell排序是一种改进的插入排序,由Donald Shell于1959年提出。它通过设置一个间隔序列,使得数组中的...
这里我们将深入探讨几种经典的排序算法:选择排序、归并排序、冒泡排序、堆排序和快速排序,并通过C++语言来实现它们,同时分析各自的效率。 **1. 选择排序(Selection Sort)** 选择排序是一种简单直观的排序算法...