Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Snowleopard_wu
Java
提交
9086252d
J
Java
项目概览
Snowleopard_wu
/
Java
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
Java
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
9086252d
编写于
4月 18, 2020
作者:
Stepfen Shawn
提交者:
GitHub
4月 18, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1256 from BenceLakos/feature/ternary
Implement ternary search
上级
d678faea
fc75a15e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
83 addition
and
0 deletion
+83
-0
src/main/java/com/search/TernarySearch.java
src/main/java/com/search/TernarySearch.java
+57
-0
src/test/java/com/search/TernarySearchTest.java
src/test/java/com/search/TernarySearchTest.java
+26
-0
未找到文件。
src/main/java/com/search/TernarySearch.java
0 → 100644
浏览文件 @
9086252d
package
com.search
;
/**
* A ternary search algorithm is a technique in computer science for finding the minimum or maximum of a unimodal function
* The algorithm determines either that the minimum or maximum cannot be in the first third of the domain
* or that it cannot be in the last third of the domain, then repeats on the remaining third.
* <p>
* Worst-case performance Θ(log3(N))
* Best-case performance O(1)
* Average performance Θ(log3(N))
* Worst-case space complexity O(1)
*/
public
final
class
TernarySearch
{
/**
* @param arr The **Sorted** array in which we will search the element.
* @param value The value that we want to search for.
* @return The index of the element if found.
* Else returns -1.
*/
public
static
<
T
extends
Comparable
<
T
>>
int
find
(
T
[]
arr
,
T
value
)
{
return
search
(
arr
,
value
,
0
,
arr
.
length
-
1
);
}
/**
* @param arr The **Sorted** array in which we will search the element.
* @param key The value that we want to search for.
* @param start The starting index from which we will start Searching.
* @param end The ending index till which we will Search.
* @return Returns the index of the Element if found.
* Else returns -1.
*/
private
static
<
T
extends
Comparable
<
T
>>
int
search
(
T
[]
arr
,
T
key
,
int
start
,
int
end
)
{
if
(
start
>
end
)
{
return
-
1
;
}
int
mid1
=
start
+
(
end
-
start
)
/
3
;
int
mid2
=
start
+
2
*
(
end
-
start
)
/
3
;
if
(
key
.
compareTo
(
arr
[
mid1
])
==
0
)
{
return
mid1
;
}
else
if
(
key
.
compareTo
(
arr
[
mid2
])
==
0
)
{
return
mid2
;
}
else
if
(
key
.
compareTo
(
arr
[
mid1
])
<
0
)
{
return
search
(
arr
,
key
,
start
,
--
mid1
);
}
else
if
(
key
.
compareTo
(
arr
[
mid2
])
>
0
)
{
return
search
(
arr
,
key
,
++
mid2
,
end
);
}
else
{
return
search
(
arr
,
key
,
mid1
,
mid2
);
}
}
}
src/test/java/com/search/TernarySearchTest.java
0 → 100644
浏览文件 @
9086252d
package
com.search
;
import
org.junit.jupiter.api.Assertions
;
import
org.junit.jupiter.api.Test
;
public
class
TernarySearchTest
{
@Test
void
testTernarySearch
()
{
Integer
[]
arr1
=
{
1
,
2
,
3
,
5
,
8
,
13
,
21
,
34
,
55
};
Assertions
.
assertEquals
(
2
,
TernarySearch
.
find
(
arr1
,
3
),
"Incorrect index"
);
Assertions
.
assertEquals
(
0
,
TernarySearch
.
find
(
arr1
,
1
),
"Incorrect index"
);
Assertions
.
assertEquals
(
8
,
TernarySearch
.
find
(
arr1
,
55
),
"Incorrect index"
);
Assertions
.
assertEquals
(-
1
,
TernarySearch
.
find
(
arr1
,
-
2
),
"Incorrect index"
);
Assertions
.
assertEquals
(-
1
,
TernarySearch
.
find
(
arr1
,
4
),
"Incorrect index"
);
String
[]
arr2
=
{
"A"
,
"B"
,
"C"
,
"D"
};
Assertions
.
assertEquals
(
2
,
TernarySearch
.
find
(
arr2
,
"C"
),
"Incorrect index"
);
Assertions
.
assertEquals
(
1
,
TernarySearch
.
find
(
arr2
,
"B"
),
"Incorrect index"
);
Assertions
.
assertEquals
(-
1
,
TernarySearch
.
find
(
arr2
,
"F"
),
"Incorrect index"
);
String
[]
arr3
=
{};
Assertions
.
assertEquals
(-
1
,
TernarySearch
.
find
(
arr3
,
""
),
"Incorrect index"
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录