java排序算法-归并排序
public class MergeSort {
private static void mergeSortTest() {
int[] in = { 2, 5, 3, 8, 6, 7, 1, 4, 0, 9 };
Utils.printArray("归并排序前:",in);
int a[] = mergeSort(in);
Utils.printArray("归并排序后:",a);
}
private static int[] mergeSort(int[] arr) {
if (arr.length == 1) {
return arr;
} else {
int[] arrL = new int[arr.length / 2];
int[] arrR = new int[arr.length - arr.length / 2];
int mid = arr.length / 2;
for (int i = 0; i < mid; i++) {
arrL[i] = arr[i];
}
for (int i = mid, j = 0; i < arr.length; i++, j++) {
arrR[j] = arr[i];
}
int[] sortedArrL = mergeSort(arrL);
int[] sortedArrR = mergeSort(arrR);
int[] resultArr = mergeTwoArr(sortedArrL, sortedArrR);
return resultArr;
}
}
private static int[] mergeTwoArr(int[] arrL, int[] arrR) {
int i = 0, j = 0;
int[] arrTmp = new int[arrL.length + arrR.length];
int foot = 0;
while (i < arrL.length && j < arrR.length) {
if (arrL[i] <= arrR[j]) {
arrTmp[foot++] = arrL[i++];
} else {
arrTmp[foot++] = arrR[j++];
}
}
if (i == arrL.length) {
while (j < arrR.length) {
arrTmp[foot++] = arrR[j++];
}
} else {
while (i < arrL.length) {
arrTmp[foot++] = arrL[i++];
}
}
return arrTmp;
}
public static void main(String[] args) {
mergeSortTest();
}
}
java排序算法-归并排序的更多相关文章
- Java排序算法——归并排序
import java.util.Arrays; //================================================= // File Name : MergeSor ...
- java排序算法(九):归并排序
java排序算法(九):归并排序
- java排序算法(一):概述
java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...
- java排序算法(四):冒泡排序
java排序算法(四):冒泡排序 冒泡排序是计算机的一种排序方法,它的时间复杂度是o(n^2),虽然不及堆排序.快速排序o(nlogn,底数为2).但是有两个优点 1.编程复杂度很低.很容易写出代码 ...
- Java排序算法(三)
Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...
- Java排序算法(二)
java排序算法(二) 二.改进排序算法 2.1希尔排序 定义:希尔排序(ShellSort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. ...
- Java排序算法(一)
Java排序算法(一) 排序的基本概念和分类 1.1排序的定义 在<大话数据结构>中,排序定义为,假设含有n个记录的序列为{r1,r2,...,rn},其相应的关键字{k1,k2,..., ...
- Java排序之归并排序
Java排序之归并排序 1. 简介 归并排序的算法是将多个有序数据表合并成一个有序数据表.如果参与合并的只有两个有序表,则成为二路合并.对于一个原始的待排序数列,往往可以通过分割的方法来归结为多路合并 ...
- java排序算法之冒泡排序和快速排序
总结一下Java排序算法,以便记忆. 各类排序的时间复杂度: 排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性 直接插入排序 O(n2)O(n2) O( ...
随机推荐
- animation的6个属性
@keyframes 规定动画. animation 所有动画属性的简写属性,除了 animation-play-state 属性. animation-name 规定 @keyframes ...
- 【转】JAVA的StringBuffer类
[转]JAVA的StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBu ...
- VsCode使用技巧
VsCode版本1.7.2 1. node智能提示:vscode1.7之前的版本智能提示是采用jsconfig.json方式,在右下角会有小灯泡,点击创建jsconfig.json.1.7之后使用Ty ...
- WebService笔记-Schema约束
Schema约束 俗话说得好 好记性不如烂笔头. 看了下WebService视频,觉得还是得下笔记. 观看的视频地址:http://edu.51cto.com/ ...
- 汇编程序w=x*y+z-200
DATA SEGMENTX DW 1000Y DW 2000Z DW 3000W DW 2 DUP(?)DATA ENDSCODE SEGM ...
- 不熟悉的CSS样式
1.font连写: 例如:font:15px/23px "ralewayregular","Helvetica Neue",Helvetica,Arial,sa ...
- 10分钟 教你学会Linux/Unix下的vi文本编辑器
10分钟 教你学会Linux/Unix下的vi文本编辑器 vi编辑器是Unix/Linux系统管理员必须学会使用的编辑器.看了不少关于vi的资料,终于得到这个总结.不敢独享,和你们共享. 首先,记住v ...
- 实现跨线程访问UI控件的3种方法
namespace 多线程 { public partial class Form2 : Form { public Form2() { InitializeComponent(); } privat ...
- angularJS中如何写服务
服务的用途 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性 服务提供了把特定功能相关联的方法集中在一起的接口 如何创建服务 angularJS ...
- win7 IIS7.0 【IIS 管理器无法验证此内置帐户是否有访问权】
异常信息: 服务器配置为将传递身份验证和内置帐户一起使用,以访问指定的物理路径.但是,IIS 管理器无法验证此内置帐户是否有访问权.请确保应用程序池标识具有该物理路径的读取访问权.如果此服务器加入到域 ...