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. [转]Gitlab-CI持续集成之Runner配置和CI脚本

    本文转自:https://www.cnblogs.com/jiukun/p/7481287.html 一.简介 1. 为实现持续集成,需为该项目准备以下两样东西: 1)软件集成脚本.(gitlab-c ...

  2. Java与.net的选择和比较

    跨平台对开发商是一个巨大的诱惑.一次开发,多个平台使用,降低了迁移成本,有利.但Java的开发工具没有.net顺手,对编码人员的要求比.net要高. .net培训成本低,上手快.尤其如果开发人员以前都 ...

  3. IOC,DIP,DI,IoC容器

    定义 IOC(Inversion of Control  控制反转),DIP(Dependency Inverson Principle 依懒倒置)都属于设计程序时指导原则,并没有具体的实现.比较常用 ...

  4. 从零开始学安全(三十九)●FCK编辑器解析漏洞

    fck 现在存在漏洞的本版分别是 2.4.2 ,2.4.4,2.6.6 可以在 查看版本 2.4.2 在 图片域有上传点 2.4.4 这里有几个按钮,首先是 Get Folders and Files ...

  5. 异步加载js的三种方法

    js加载时间线 : 它是根据js出生的那一刻开始记录的一系列浏览器按照顺序做的事,形容的就是加载顺序,可以用来优化什么东西,理论基础,背下来. 1.创建Document对象,开始解析web页面.解析H ...

  6. 腾讯面试题,js处理1千万条数据排序并且页面不卡顿

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. ifram 局部刷新,不刷新父级

    function loadIframe(url) { //获取url链接 var u = window.location.href; //因为每次获取的链接中都有之前的旧锚点, //所以需要把#之后的 ...

  8. SQL Server中几种遍历方式比较

    SQL遍历解析 在SQL的存储过程,函数中,经常需要使用遍历(遍历table),其中游标.临时表等遍历方法很常用.面对小数据量,这几种遍历方法均可行,但是面临大数据量时,就需要择优选择,不同的遍历方法 ...

  9. Vue介绍

    1.Vue的简介 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 AP ...

  10. float与double

    对数值类型的细节了解在大学里就是一带而过,自己始终也没好好看过.这是在csdn上看到的一篇文章,挺好的,记录下来. https://blog.csdn.net/Demon__Hunter/articl ...