递归merge排序
package sort; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner; public class MergeSort {
public static void merge(int[] arr, int[] tmp, int l_start,
int r_start, int r_end) {
int tmp_pos = l_start;
int l_end = r_start-1;
int i=l_start;
int j = r_start;
while(i<=l_end&&j<=r_end){
if(arr[i]<arr[j]){
tmp[tmp_pos++]=arr[i++];
}
else{
tmp[tmp_pos++]=arr[j++];
}
}
while(i<=l_end){
tmp[tmp_pos++]=arr[i++];
} while(j<=r_end){
tmp[tmp_pos++]=arr[j++];
}
int N = r_end - l_start+1;
for(int k=0;k<N;k++,r_end--){
arr[r_end] = tmp[r_end];
} } public static void mssort(int[] arr, int[] tmp, int left, int right) {
if (left < right) {
int center = (left + right) / 2;
mssort(arr, tmp, left, center);
mssort(arr, tmp, center + 1, right);
merge(arr, tmp, left, center + 1, right);
}
} public static void main(String[] args) {
int N;
Scanner scanner = new Scanner(new BufferedReader(new InputStreamReader(
System.in)));
N = scanner.nextInt();
int[] arr = new int[N];
int[] tmp = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = scanner.nextInt();
}
scanner.close();
mssort(arr,tmp,0,arr.length-1);
for(int i=0;i<tmp.length;i++){
System.out.println(tmp[i]);
}
} }
递归merge排序的更多相关文章
- sicily 1198. Substring (递归全排列+排序)
DescriptionDr lee cuts a string S into N pieces,s[1],…,s[N]. Now, Dr lee gives you these N sub-strin ...
- C#实现(递归和非递归)高速排序和简单排序等一系列排序算法
本人由于近期工作用到了一些排序算法.就把几个简单的排序算法.想冒泡排序,选择排序,插入排序.奇偶排序和高速排序等整理了出来,代码用C#代码实现,而且通过了測试.希望能给大家提供參考. ...
- 牛客多校第十场 E Hilbert Sort 递归,排序
题意: 给你一个方阵,再在方阵上给定一些点,按照希尔伯特曲线经过的先后顺序为这些点排序 题解: 定义好比较函数后直接调用排序算法即可. 希尔伯特曲线本来就是用于二维到一维的映射的,因此我们可以考虑对于 ...
- Java各种排序算法详解
排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序. 内排序有可以分为以下几类: (1).插 ...
- Java程序员必须掌握的8大排序算法
分类: 1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序) 所需辅助空间最多:归并排序所需辅助空间最少:堆 ...
- 各种排序算法的分析及java实现
排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强能写出个冒泡排序.由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间 ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- [转]Java 常用排序算法/程序员必须掌握的 8大排序算法
本文转自:http://www.cnblogs.com/qqzy168/archive/2013/08/03/3219201.html 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插 ...
- java SE 常用的排序算法
java程序员会用到的经典排序算法实现 常用的排序算法(以下代码包含的)有以下五类: A.插入排序(直接插入排序.希尔排序) B.交换排序(冒泡排序.快速排序) C.选择排序(直接选择排序.堆排序) ...
随机推荐
- UDP穿透NAT原理解析
转自:http://www.2cto.com/net/201201/116793.html NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益 ...
- python web编程-CGI帮助web服务器处理客户端编程
这几篇博客均来自python核心编程 如果你有任何疑问,欢迎联系我或者仔细查看这本书的地20章 另外推荐下这本书,希望对学习python的同学有所帮助 概念预热 eb客户端通过url请求web服务器里 ...
- 偷师--先留着。。ssh,nginx,防火墙相关命令
- MFC中afx_msg是什么,afx_msg void function()是什么意思
应用程序框架产生的消息映射函数例如:afx_msg void OnBnClickedButton1(); 其中 afx_msg为消息标志,它向系统声明:有消息映射到函数实现体:而在map宏定义中,就有 ...
- popupwindow点击空白处如何自动消失?
Popupwindow如果需要点击空白处自动消失,需要设置两个函数 1.customPopWindow.setFocusable(true);该函数也可以在构造函数中设置,如:mPopupWindow ...
- 使用lsof查看进程句柄使用情况
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
- 创建Thread类的子类
package unit8; public class MyThreadTest { public static void main(String[] args) { MyThread t1 = ne ...
- 解决Eclipse建Maven项目module无法转换为2.3
Maven项目在Project Facets里面修改Dynamic web module为2.3的时候就会出现Cannot change version of project facet Dynami ...
- Swift3.0语言教程字符串转换为数字值
Swift3.0语言教程字符串转换为数字值 Swift3.0语言教程字符串转换为数字值,在NSString中,开发者可以将字符串转换为数字值,通过这些数字值可以实现一些功能,如加法运算.减法运算等.数 ...
- event 内存泄漏
组长说用event有内存泄漏的隐患..做个测试. 预留