MargeSort
归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使 每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
归并算法原理:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列。
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置。
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置。
重复步骤3直到某一指针超出序列尾。
将另一序列剩下的所有元素直接复制到合并序列尾。
归并算法代码(java):
package
MergeSort;
public
class
MergeSort {
public
static
int
[] mergeSort(
int
[] nums,
int
l,
int
h) {
if
(l == h)
return
new
int
[] { nums[l] };
int
mid = (l + h - l) /
2
;
int
[] leftArr = mergeSort(nums, l, mid);
//左有序数组
int
[] rightArr = mergeSort(nums, mid +
1
, h);
//右有序数组
int
[] newNum =
new
int
[leftArr.length + rightArr.length];
//新有序数组
int
m =
0
, i =
0
, j =
0
;
while
(i < leftArr.length && j < rightArr.length) {
newNum[m++] = leftArr[i] < rightArr[j] ? leftArr[i++] : rightArr[j++];
}
while
(i < leftArr.length)
newNum[m++] = leftArr[i++];
while
(j < rightArr.length)
newNum[m++] = rightArr[j++];
return
newNum;
}
public
static
void
main(String[] args) {
int
[] nums =
new
int
[] {
9
,
8
,
7
,
6
,
5
,
4
,
3
,
2
,
10
};
int
[] newNums = mergeSort(nums,
0
, nums.length -
1
);
for
(
int
x : newNums) {
System.out.println(x);
}
}
}
MargeSort的更多相关文章
- 【刷题】洛谷 P1966 火柴排队
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- 排序算法(java版)
一直想理解一下基本的排序算法,最近正好在搞java所以就一并了(为了便于理解,这儿都是以从小到大排序为目的) 冒泡排序 也就是比较连续的两个值,如果前面一个值大于后面一个值,则交换. 时间复杂度为O( ...
随机推荐
- Visual Studio增加Class类顶部签名描述信息
1. 找到安装路径 默认在 C:\Program Files (x86)\Microsoft Visual Studio\,然后进入到2019\Professional\Common7\IDE\Ite ...
- POJ1737 连通图
一句话题意:求一个 \(n\) 点带编号的连通图数量. 吐槽一下:好好一道计数 dp 为什么不加取余????逼着选手写高精度的出题人应该拎出去烧--哦楼天城是出题人是吧哦当我没说我什么都没说我现在就把 ...
- CCRD_TOC_2008年第9和第10期
中信国健临床通讯 2008年第9.第10期合刊 目 录 类风湿关节炎 1. 关于RA临床缓解与关节持续破坏相分离现象的一种解释 Brown AK, et al. Arthritis Rheum. ...
- 运维排查篇 | Linux 连接跟踪表满了怎么处理
nf_conntrack (在老版本的 Linux 内核中叫 ip_conntrack )是一个内核模块,用于跟踪一个网络连接的状态 一旦内核 netfilter 模块 conntrack 相关参数配 ...
- pat乙级 1017 A除以B 模拟除法
#include <stdio.h> #define MAX_A 1000 int A[MAX_A]; int B; /* 除数 */ int num; /* A 被除数有多少位 */ v ...
- script和template里可选链运算符?.报错Syntax Error: Unexpected token (64:2)
前情:babel-core@6.2.3, vue@2.7.14 试过的方法:1.安装@babel/plugin-proposal-optional-chaining,设置.babelrc文件如下,报 ...
- CRM管理系统界面
- 【MySQL】导出到CSV
http://www.yiidian.com/mysql/mysql-export-table-to-cvs.html 要将表导出为 CSV 文件,我们将使用SELECT INTO....OUTFIL ...
- vue框架回顾
- 论文阅读: CCF A 2021 PROGRAML:用于数据流分析和编译器优化的基于图的程序表示 (PMLR)
Motivation: 编译器实现是一项复杂而昂贵的活动.出于这个原因,人们对使用机器学习来自动化各种编译器任务产生了极大的兴趣,大多数工作都将注意力限制在选择编译器启发式或做出优化决策.现有的基 ...