Insertion Sort 与 Merge Sort的性能比较(Java)
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)的更多相关文章
- Insertion Sort and Merge Sort
Insertion Sort(插入排序) 思路:for 循环遍历数组中的每一个数 用while将每次遍历到的数于左侧的数进行对比,将小的排到左边 void InsertionSort(int*A, i ...
- 【Sort】Merge Sort归并排序
归并排序运行时间O(N log N),但是由于需要线性附加内存,所以很少用于主存排序. 算法核心在于以下三条语句,分治递归,分别对左半边和右半边的数组进行排序,然后把左右半边的数组一一进行比较放入数组 ...
- [Algorithms] Sorting Algorithms (Insertion Sort, Bubble Sort, Merge Sort and Quicksort)
Recently I systematicall review some sorting algorithms, including insertion sort, bubble sort, merg ...
- 归并排序(merge sort)
M erge sort is based on the divide-and-conquer paradigm. Its worst-case running time has a lower ord ...
- 基础排序算法之并归排序(Merge Sort)
并归排序是学习分治法 (Merge Sort) 的好例子.而且它相对于选择,插入,冒泡排序来说,算法性能有一定提升.我首先会描述要解决的问题,并给出一个并归排序的例子.之后是算法的思路以及给出伪代码. ...
- 【高级排序算法】2、归并排序法的实现-Merge Sort
简单记录 - bobo老师的玩转算法系列–玩转算法 -高级排序算法 Merge Sort 归并排序 Java实现归并排序 SortTestHelper 排序测试辅助类 package algo; im ...
- 【高级排序算法】1、归并排序法 - Merge Sort
归并排序法 - Merge Sort 文章目录 归并排序法 - Merge Sort nlogn 比 n^2 快多少? 归并排序设计思想 时间.空间复杂度 归并排序图解 归并排序描述 归并排序小结 参 ...
- 【算法】归并排序(Merge Sort)(五)
归并排序(Merge Sort) 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序 ...
- [算法]——归并排序(Merge Sort)
归并排序(Merge Sort)与快速排序思想类似:将待排序数据分成两部分,继续将两个子部分进行递归的归并排序:然后将已经有序的两个子部分进行合并,最终完成排序.其时间复杂度与快速排序均为O(nlog ...
随机推荐
- webpack4.0各个击破(10)—— Integration篇
webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习we ...
- Log4Net使用学习笔记
项目源文件下载https://files.cnblogs.com/files/ckym/Log4NetTestSourceCode.zip Log4net是一款非常好用的日志记录的框架,使用它可以实现 ...
- 从零开始学安全(三十八)●cobaltstrike生成木马抓肉鸡
链接:https://pan.baidu.com/s/1qstCSM9nO95tFGBsnYFYZw 提取码:w6ih 上面是工具 需要java jdk 在1.8.5 以上 实验环境windows ...
- Linux万能快捷键与命令
tab键:补全命令 \ :命令折行写 Ctrl+C :结束命令 --help :查看命令详细信息 man :类似于help 比help更加详细. sudo :临时以管理员权限执行命令. 还有吗?
- .Net Core 编码规范
.Net Core 编码规范 标签: 未分类 概述 规范制定原则 方便代码的交流和维护. 不影响编码的效率,不与大众习惯冲突. 使代码更美观.阅读更方便. 使代码的逻辑更清晰.更易于理解. 术语定义 ...
- [android] 创建模拟器遇到的常见错误
1.错误提示: invalid command line sdk安装目录有中文添加ANDROID_SDK_HOME环境变量,指向sdk安装目录2.模拟器无法安装应用模拟器开启其实是开启了的程序占用这个 ...
- Docker 安装rabbitMQ
Docker 安装rabbitMQ docker pull rabbitmq:3.7.7-management 使用:docker images 查看所有镜像 4.根据下载的镜像创建和启动容器 doc ...
- Django学习之一:Install Djongo 安装Djongo
Install Djongo 安装Djongo Djongo是基于python的web框架,自然安装最关心的是python解释器版本了. Prerequisites 安装条件 Python版本与Djo ...
- 12月16日广州.NET俱乐部下午4点爬白云山活动
正如我们在<广州.NET微软技术俱乐部与其他技术群的区别>和<广州.NET微软技术俱乐部每周三五晚周日下午爬白云山活动>里面提到的, 我们会在每周三五晚和周日下午爬白云山. ...
- [Android][Recovery] Recovery下找不到sdcard路径
做升级的时候,把更新包拷贝到sd卡中,然后调用接口进行重启升级 wossoneri.github.io File update_file = new File("/sdcard/update ...