public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] a = new int[n]; //生成n个随机数
for(int i = 0; i < n; i++)
a[i] = (int)(Math.random() * 100); /*long start = System.currentTimeMillis();
InsertionSort(a);
long end = System.currentTimeMillis();*/
//100000个测试数据InsertionSort的排序时间约为2800ms /*System.out.println(Arrays.toString(a));
System.out.println(start);
System.out.println(end);
System.out.printf("The time is: %d", end - start);*/ //获取当前时间(ms)
long start = System.currentTimeMillis();
divide(a, 0, a.length - 1);
long end = System.currentTimeMillis();
//100000000个测试数据MergeSort的排序时间约为12000ms 10000000个测试数据用时约为1200ms
//相对于平均时间复杂度O(n^2)的插入排序 随着测试数据数量级的增长 性能提升极大 //System.out.println(Arrays.toString(a));
System.out.println(start);
System.out.println(end);
// end - start 即为排序算法运行的时间
System.out.println("The time is: " + (end - start));
} /*public static void InsertionSort(int[] a)
{
for(int i = 1; i < a.length; i++)
{
int key = a[i];
int j;
for(j = i - 1; j >= 0 && key < a[j]; j--)
a[j + 1] = a[j];
a[j + 1] = key;
}
}*/ public static void divide(int[] a, int front, int rear)
{
if(rear <= front)
return; int mid = front + (rear - front) / 2;
divide(a, mid + 1, rear);
divide(a, front, mid);
merge(a, front, mid, rear);
} public static void merge(int[] a, int front, int mid, int rear)
{
int[] b = new int[rear - front + 1];
int i = front, j = mid + 1, k = 0; while(i <= mid && j <= rear)
if(a[i] < a[j])
b[k++] = a[i++];
else
b[k++] = a[j++]; if(i > mid)
while(j <= rear)
b[k++] = a[j++];
else
while(i <= mid)
b[k++] = a[i++]; for(int t = 0, q = front; t < b.length; t++, ++q)
a[q] = b[t];
}

Insertion Sort 与 Merge Sort的性能比较(Java)的更多相关文章

  1. Insertion Sort and Merge Sort

    Insertion Sort(插入排序) 思路:for 循环遍历数组中的每一个数 用while将每次遍历到的数于左侧的数进行对比,将小的排到左边 void InsertionSort(int*A, i ...

  2. 【Sort】Merge Sort归并排序

    归并排序运行时间O(N log N),但是由于需要线性附加内存,所以很少用于主存排序. 算法核心在于以下三条语句,分治递归,分别对左半边和右半边的数组进行排序,然后把左右半边的数组一一进行比较放入数组 ...

  3. [Algorithms] Sorting Algorithms (Insertion Sort, Bubble Sort, Merge Sort and Quicksort)

    Recently I systematicall review some sorting algorithms, including insertion sort, bubble sort, merg ...

  4. 归并排序(merge sort)

    M erge sort is based on the divide-and-conquer paradigm. Its worst-case running time has a lower ord ...

  5. 基础排序算法之并归排序(Merge Sort)

    并归排序是学习分治法 (Merge Sort) 的好例子.而且它相对于选择,插入,冒泡排序来说,算法性能有一定提升.我首先会描述要解决的问题,并给出一个并归排序的例子.之后是算法的思路以及给出伪代码. ...

  6. 【高级排序算法】2、归并排序法的实现-Merge Sort

    简单记录 - bobo老师的玩转算法系列–玩转算法 -高级排序算法 Merge Sort 归并排序 Java实现归并排序 SortTestHelper 排序测试辅助类 package algo; im ...

  7. 【高级排序算法】1、归并排序法 - Merge Sort

    归并排序法 - Merge Sort 文章目录 归并排序法 - Merge Sort nlogn 比 n^2 快多少? 归并排序设计思想 时间.空间复杂度 归并排序图解 归并排序描述 归并排序小结 参 ...

  8. 【算法】归并排序(Merge Sort)(五)

    归并排序(Merge Sort) 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序 ...

  9. [算法]——归并排序(Merge Sort)

    归并排序(Merge Sort)与快速排序思想类似:将待排序数据分成两部分,继续将两个子部分进行递归的归并排序:然后将已经有序的两个子部分进行合并,最终完成排序.其时间复杂度与快速排序均为O(nlog ...

随机推荐

  1. 如何正确使用Java泛型

    前言 Java 1.5之前是没有泛型的,以前从集合中读取每个对象都必须先进行转换,如果不小心存入集合中对象类型是错的,运行过程中转换处理会报错.有了泛型之后编译器会自动帮助转换,使程序更加安全,但是要 ...

  2. iOS 加锁的方式

    iOS多线程编程中,经常碰到多个线程访问共同的一个资源,在线程相互交互的情况下,需要一些同步措施,来保证线程之间交互的时候是安全的.下面我们一起看一下学一下iOS的几种常用的加锁方式,希望对大家有所帮 ...

  3. .net 上传文件 Failed to load resource: net::ERR_CONNECTION_RESET Bug 解决

    环境: .net 4.0 ashx一般处理程序 使用 html5 FormData ajax上传文件 功能如下:如果用户有登录,则对文件进行处理:如果用户没登录,则直接返回json,提示用户未登录 遇 ...

  4. Wcf传递的参数实际不为空,但是接收时显示为空。

    问题原因:参数大小写不一致引起,服务端接收参数为空 客户端引用 服务端定义

  5. 【JVM】问题排查

    jetty的调用场景是:为了支持Servlet规范中的注解方式(使得不再需要在web.xml文件中进行Servlet的部署描述,简化开发流程),jetty在启动时会扫描class.lib包,将使用注解 ...

  6. tf.nn.conv2d。卷积函数

    tf.nn.conv2d是TensorFlow里面实现卷积的函数,参考文档对它的介绍并不是很详细,实际上这是搭建卷积神经网络比较核心的一个方法,非常重要 tf.nn.conv2d(input, fil ...

  7. 通过hash实现前端路由

    router.js //构造函数 function Router() { this.routes = {}; this.currentUrl = ''; } Router.prototype.rout ...

  8. nodejs body-parser 解析post数据

    安装 $ npm install body-parser API var bodyPaeser =require('body-parser') 可以通过body-parser 对象创建中间件,当接收到 ...

  9. 搞懂 JavaScript 继承原理

    在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的 new 到底是干什么的 1. 什么是 JS 原型链? 我们知道 JS 有对象,比如 var ob ...

  10. vue 页面跳转的两种方式

    1,标签跳转     <router-link to='two'><button>点我到第二个页面</button></router-link> 2,点 ...