FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
Java/src/main/java/com/search/JumpSearch.java at Development · iDev-git/Java · GitHub
iDev-git
Java
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
Java
/
src
/
main
/
java
/
com
/
search
/
JumpSearch.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
84 lines (75 loc) · 3.16 KB
Breadcrumbs
Java
/
src
/
main
/
java
/
com
/
search
/
JumpSearch.java
Copy path
File metadata and controls
84 lines (75 loc) · 3.16 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package
com
.
search
;
public
class
JumpSearch
{
/**
* A jump search algorithm that finds the position of a key by moving over
* fixed block ranges in a sorted array, and linear searches back on itself to
* find it.
*
* Worst case time complexity: O(N^(1/2)) - square root n
* Average case time complexity: O(N^(1/2)) - square root n
* Worst case Space complexity: O(1)
*
* @param <T> This is any comparable type
* @param arr This is the array where the element should be found
* @param key This is the element to find in the array
* @return The index of the key in the array
*/
public
<
T
extends
Comparable
<
T
>>
int
findIndex
(
T
arr
[],
T
key
) {
return
checkCondition
(
arr
,
key
,
arr
.
length
);
}
/**
* @param arrLength The array's length
* @return The index position of the key in the array
*/
public
<
T
extends
Comparable
<
T
>>
int
checkCondition
(
T
arr
[],
T
key
,
int
arrLength
) {
int
step
= (
int
)
Math
.
floor
(
Math
.
sqrt
(
arrLength
));
// Find jump block
int
previous
=
0
;
// Find block where element is / or not present
// Use ternary operator to find if step or array length is min value
// and then minus the min value by one
int
minVal
= (
step
<
arrLength
) ?
step
-
1
:
arrLength
-
1
;
String
arrayMinValIndexString
=
arr
[
minVal
].
toString
();
int
arrayMinValIndexInt
=
Integer
.
parseInt
(
arrayMinValIndexString
);
String
keyValueString
=
key
.
toString
();
int
keyValueInt
=
Integer
.
parseInt
(
keyValueString
);
// Increment next step and previous step in block to find range block
while
(
arrayMinValIndexInt
<
keyValueInt
) {
previous
=
step
;
step
+= (
int
)
Math
.
floor
(
Math
.
sqrt
(
arrLength
));
if
(
previous
>=
arrLength
)
return
-
1
;
minVal
= (
step
<
arrLength
) ?
step
-
1
:
arrLength
-
1
;
arrayMinValIndexString
=
arr
[
minVal
].
toString
();
arrayMinValIndexInt
=
Integer
.
parseInt
(
arrayMinValIndexString
);
}
// Get key position in linear search
int
position
=
linearSearchBlock
(
arr
,
key
,
step
,
previous
,
keyValueInt
,
arrLength
,
minVal
);
return
position
;
}
/**
* @param step The next block index in the array
* @param previous The previous block index in the array
* @param keyValueInt The key in the format of an integer
* @param minVal The minimum value of either next step or array length
* @return The index position of the key in the array
*/
public
<
T
extends
Comparable
<
T
>>
int
linearSearchBlock
(
T
arr
[],
T
key
,
int
step
,
int
previous
,
int
keyValueInt
,
int
arrLength
,
int
minVal
) {
// Linear search starting from previous block forwards.
String
arrayPositionString
=
arr
[
previous
].
toString
();
int
arrayPositionValue
=
Integer
.
parseInt
(
arrayPositionString
);
while
(
arrayPositionValue
<
keyValueInt
) {
// If in next block or end of array length, key not in array
if
(
previous
==
minVal
)
return
-
1
;
previous
++;
// Update arrayPositionValue in iteration
minVal
= (
step
<
arrLength
) ?
step
-
1
:
arrLength
-
1
;
arrayPositionString
=
arr
[
previous
].
toString
();
arrayPositionValue
=
Integer
.
parseInt
(
arrayPositionString
);
}
// If the key is found
if
(
arrayPositionValue
==
keyValueInt
)
return
previous
;
return
-
1
;
}
}
Back
|
FazBrowse Home
|
New Git URL