Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
GreyZeng
algorithm
提交
3db0a4d7
A
algorithm
项目概览
GreyZeng
/
algorithm
通知
10
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
3db0a4d7
编写于
1月 06, 2024
作者:
GreyZeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update code
上级
2472d343
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
56 addition
and
32 deletion
+56
-32
src/main/java/git/snippet/mergesort/Code_MergeSort.java
src/main/java/git/snippet/mergesort/Code_MergeSort.java
+48
-28
src/test/java/git/snippet/mergesort/Code_MergeSortTest.java
src/test/java/git/snippet/mergesort/Code_MergeSortTest.java
+8
-4
未找到文件。
src/main/java/git/snippet/mergesort/Code_MergeSort.java
浏览文件 @
3db0a4d7
...
@@ -10,52 +10,48 @@ package git.snippet.mergesort;
...
@@ -10,52 +10,48 @@ package git.snippet.mergesort;
//归并排序的实质是把比较行为变成了有序信息并传递,比O(N^2)的排序快
//归并排序的实质是把比较行为变成了有序信息并传递,比O(N^2)的排序快
// 笔记:https://www.cnblogs.com/greyzeng/p/16653063.html
// 笔记:https://www.cnblogs.com/greyzeng/p/16653063.html
public
class
Code_MergeSort
{
public
class
Code_MergeSort
{
// 递归方法实现
// 递归方法实现
public
static
void
mergeS
ort1
(
int
[]
arr
)
{
public
static
void
s
ort1
(
int
[]
arr
)
{
if
(
null
==
arr
||
arr
.
length
<=
1
)
{
if
(
null
==
arr
||
arr
.
length
<=
1
)
{
return
;
return
;
}
}
p
rocess
(
arr
,
0
,
arr
.
length
-
1
);
p
(
arr
,
0
,
arr
.
length
-
1
);
}
}
public
static
void
p
rocess
(
int
[]
arr
,
int
l
,
int
r
)
{
public
static
void
p
(
int
[]
arr
,
int
l
,
int
r
)
{
if
(
l
=
=
r
)
{
if
(
l
>
=
r
)
{
return
;
return
;
}
}
// 求中点
int
m
=
l
+
((
r
-
l
)
>>
1
);
int
mid
=
l
+
((
r
-
l
)
>>
1
);
p
(
arr
,
l
,
m
);
// 左边部分有序
p
(
arr
,
m
+
1
,
r
);
process
(
arr
,
l
,
mid
);
m
(
arr
,
l
,
m
,
r
);
// 右边部分有序
process
(
arr
,
mid
+
1
,
r
);
// 整体变有序
merge
(
arr
,
l
,
mid
,
r
);
}
}
p
rivate
static
void
merge
(
int
[]
arr
,
int
l
,
int
m
,
int
r
)
{
p
ublic
static
void
m
(
int
[]
arr
,
int
l
,
int
m
,
int
r
)
{
int
[]
help
er
=
new
int
[
r
-
l
+
1
];
int
[]
help
=
new
int
[
r
-
l
+
1
];
int
index
=
0
;
int
s
=
l
;
int
ls
=
l
;
int
e
=
m
+
1
;
int
rs
=
m
+
1
;
int
i
=
0
;
while
(
ls
<=
m
&&
rs
<=
r
)
{
while
(
s
<=
m
&&
e
<=
r
)
{
if
(
arr
[
ls
]
>
arr
[
rs
])
{
if
(
arr
[
s
]
<
arr
[
e
])
{
help
er
[
index
++]
=
arr
[
r
s
++];
help
[
i
++]
=
arr
[
s
++];
}
else
{
}
else
{
help
er
[
index
++]
=
arr
[
ls
++];
help
[
i
++]
=
arr
[
e
++];
}
}
}
}
while
(
l
s
<=
m
)
{
while
(
s
<=
m
)
{
help
er
[
index
++]
=
arr
[
l
s
++];
help
[
i
++]
=
arr
[
s
++];
}
}
while
(
rs
<=
r
)
{
while
(
e
<=
r
)
{
help
er
[
index
++]
=
arr
[
rs
++];
help
[
i
++]
=
arr
[
e
++];
}
}
for
(
int
i
=
0
;
i
<
helper
.
length
;
i
++)
{
for
(
int
k
=
0
;
k
<
help
.
length
;
k
++)
{
arr
[
l
+
i
]
=
helper
[
i
];
arr
[
l
+
k
]
=
help
[
k
];
}
}
}
}
// 非递归方法实现
// 非递归方法实现
public
static
void
mergeSort2
(
int
[]
arr
)
{
public
static
void
mergeSort2
(
int
[]
arr
)
{
if
(
null
!=
arr
&&
arr
.
length
>
1
)
{
if
(
null
!=
arr
&&
arr
.
length
>
1
)
{
...
@@ -79,4 +75,28 @@ public class Code_MergeSort {
...
@@ -79,4 +75,28 @@ public class Code_MergeSort {
}
}
}
}
}
}
private
static
void
merge
(
int
[]
arr
,
int
l
,
int
m
,
int
r
)
{
int
[]
helper
=
new
int
[
r
-
l
+
1
];
int
index
=
0
;
int
ls
=
l
;
int
rs
=
m
+
1
;
while
(
ls
<=
m
&&
rs
<=
r
)
{
if
(
arr
[
ls
]
>
arr
[
rs
])
{
helper
[
index
++]
=
arr
[
rs
++];
}
else
{
helper
[
index
++]
=
arr
[
ls
++];
}
}
while
(
ls
<=
m
)
{
helper
[
index
++]
=
arr
[
ls
++];
}
while
(
rs
<=
r
)
{
helper
[
index
++]
=
arr
[
rs
++];
}
for
(
int
i
=
0
;
i
<
helper
.
length
;
i
++)
{
arr
[
l
+
i
]
=
helper
[
i
];
}
}
}
}
src/test/java/git/snippet/mergesort/Code_MergeSortTest.java
浏览文件 @
3db0a4d7
...
@@ -11,31 +11,35 @@ import static git.snippet.common.Generator.generateRandomArray;
...
@@ -11,31 +11,35 @@ import static git.snippet.common.Generator.generateRandomArray;
@DisplayName
(
"归并排序"
)
@DisplayName
(
"归并排序"
)
public
class
Code_MergeSortTest
{
public
class
Code_MergeSortTest
{
@Test
@Test
public
void
mergeSortTest1
()
{
@DisplayName
(
"归并排序递归解法测试"
)
public
void
mergeSortTest2
()
{
int
times
=
500000
;
// 测试的次数
int
times
=
500000
;
// 测试的次数
int
maxSize
=
100
;
// 数组的最大长度是100
int
maxSize
=
100
;
// 数组的最大长度是100
int
maxValue
=
100
;
// 数组元素的大小[-100,100]
int
maxValue
=
100
;
// 数组元素的大小[-100,100]
for
(
int
i
=
0
;
i
<
times
;
i
++)
{
for
(
int
i
=
0
;
i
<
times
;
i
++)
{
int
[]
arr1
=
generateRandomArray
(
maxSize
,
maxValue
);
int
[]
arr1
=
generateRandomArray
(
maxSize
,
maxValue
);
int
[]
arr4
=
copyArray
(
arr1
);
int
[]
arr4
=
copyArray
(
arr1
);
Code_MergeSort
.
mergeSort2
(
arr1
);
Code_MergeSort
.
sort1
(
arr1
);
Arrays
.
sort
(
arr4
);
Arrays
.
sort
(
arr4
);
Assertions
.
assertArrayEquals
(
arr1
,
arr4
);
Assertions
.
assertArrayEquals
(
arr1
,
arr4
);
}
}
}
}
@Test
@Test
public
void
mergeSortTest2
()
{
@DisplayName
(
"归并排序非递归解法测试"
)
public
void
mergeSortTest1
()
{
int
times
=
500000
;
// 测试的次数
int
times
=
500000
;
// 测试的次数
int
maxSize
=
100
;
// 数组的最大长度是100
int
maxSize
=
100
;
// 数组的最大长度是100
int
maxValue
=
100
;
// 数组元素的大小[-100,100]
int
maxValue
=
100
;
// 数组元素的大小[-100,100]
for
(
int
i
=
0
;
i
<
times
;
i
++)
{
for
(
int
i
=
0
;
i
<
times
;
i
++)
{
int
[]
arr1
=
generateRandomArray
(
maxSize
,
maxValue
);
int
[]
arr1
=
generateRandomArray
(
maxSize
,
maxValue
);
int
[]
arr4
=
copyArray
(
arr1
);
int
[]
arr4
=
copyArray
(
arr1
);
Code_MergeSort
.
mergeSort
1
(
arr1
);
Code_MergeSort
.
mergeSort
2
(
arr1
);
Arrays
.
sort
(
arr4
);
Arrays
.
sort
(
arr4
);
Assertions
.
assertArrayEquals
(
arr1
,
arr4
);
Assertions
.
assertArrayEquals
(
arr1
,
arr4
);
}
}
}
}
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录