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( ...
随机推荐
- 如何开通www国际域名个人网站
欢迎访问我的域名http://www.baiqiantao.xyz 一.准备知识 什么是域名? 所有以www开头的域名,就是国际域名:不以www开头的域名,都是为子域名. 域名都有后缀,后缀是有意义的 ...
- JS获取客户端的窗口大小
function getClientSize() { var c = window, b = document, a = b.documentElement; if (c.in ...
- JavaScript回调函数的理解
这里是个人对回调函数的一段理解 <!DOCTYPE html> <html> <head> <title>回调函数</title> < ...
- C#实现自动切割图片
由于做一个TD游戏需要一些图片素材,可是现有的从网上下载的<保卫萝卜>的图片资源是多张图片合在一起的,并且没有什么规则,虽然有 个xml文件似乎用来描述此图片内子图片位置大小等信息,但由于 ...
- c# 学习笔记(三)
程序集程序集的私有部署 不用在注册表中注册组件卸载只需要从文件系统中删除他即可 共享程序集和GAC 只有强命名程序集能被添加到GAC中程序集数据签名只需在安装到GAC时检查一次 GAC内的并肩执行GA ...
- birt报表中使用多个数据集。
这个问题困扰了几天,也没搜到答案,由于工作需要,创建了两个数据集和两个表格,第一个数据集和表格之间没有任何问题.但是第二个数据集拖过去就显示不可用,除非拖到表格外面,当然也就没用了.一朋友说拖一个网格 ...
- POJ3126 Prime Path (bfs+素数判断)
POJ3126 Prime Path 一开始想通过终点值双向查找,从最高位开始依次递减或递增,每次找到最接近终点值的素数,后来发现这样找,即使找到,也可能不是最短路径, 而且代码实现起来特别麻烦,后来 ...
- [转]memmove函数
[FROM MSDN && 百科] 原型: void *memmove( void* dest, const void* src, size_tcount ); #include&l ...
- Python 3中bytes和str的分别
最近把一段py2的代码转换到py3的代码,结果运行到向socket中写数据的代码部分出现了'str' does not support the buffer interface这样一个错误. 一番搜索 ...
- UVA - 11346 Probability (概率)
Description Probability Time Limit: 1 sec Memory Limit: 16MB Consider rectangular coordinate system ...