作者热门文章
- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章java实现归并排序算法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
归并排序算法思想: 分而治之(divide - conquer);每个递归过程涉及三个步骤 第一, 分解: 把待排序的 n 个元素的序列分解成两个子序列, 每个子序列包括 n/2 个元素. 第二, 治理: 对每个子序列分别调用归并排序MergeSort, 进行递归操作 第三, 合并: 合并两个排好序的子序列,生成排序结果. 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
public
static
void
mergeSort(
int
[] a,
int
[] tmp,
int
left,
int
right) {
if
(left < right) {
int
mid = left + (right - left) /
2
;
mergeSort(a, tmp, left, mid);
// 左排序
mergeSort(a, tmp, mid +
1
, right);
// 右排序
merge(a, tmp, left, mid +
1
, right);
// 左右合并
}
}
public
static
void
merge(
int
[] a,
int
[] tmp,
int
left,
int
rightPos,
int
right) {
int
leftEnd = rightPos -
1
;
int
tmpPos = left;
int
num = right - left +
1
;
while
(left <= leftEnd && rightPos <= right) {
if
(a[left] < a[rightPos]) {
tmp[tmpPos++] = a[left++];
}
else
{
tmp[tmpPos++] = a[rightPos++];
}
}
while
(left <= leftEnd) {
tmp[tmpPos++] = a[left++];
}
while
(rightPos <= right) {
tmp[tmpPos++] = a[rightPos++];
}
for
(
int
i =
0
; i < num; i++, right--) {
a[right] = tmp[right];
}
}
|
归并算法示意图:
以上所述就是本文的全部内容了,希望大家能够喜欢.
最后此篇关于java实现归并排序算法的文章就讲到这里了,如果你想了解更多关于java实现归并排序算法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
本文实例汇总了Java各种排序算法。分享给大家供大家参考,具体如下: 1. 冒泡排序: ?
1.冒泡排序 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 算法步
前言 平时用惯了高级语言高级工具高级算法,难免对一些基础算法感到生疏。但最基础的排序算法中实则蕴含着相当丰富的优化思维,熟练运用可起到举一反三之功效。 选择排序 选择排序几乎是
我是一名优秀的程序员,十分优秀!