1+ import java .util .Scanner ;
2+
3+ public class TernarySearch {
4+
5+ /**
6+ * @param arr The **Sorted** array in which we will search the element.
7+ * @param value The value that we want to search for.
8+ * @return The index of the element if found.
9+ * Else returns -1.
10+ */
11+ public static int ternarySearch (int [] arr , int value ){
12+ return ternarySearch (arr , value , 0 , arr .length - 1 );
13+ }
14+
15+ /**
16+ * @param arr The **Sorted** array in which we will search the element.
17+ * @param key The value that we want to search for.
18+ * @param start The starting index from which we will start Searching.
19+ * @param end The ending index till which we will Search.
20+ * @return Returns the index of the Element if found.
21+ * Else returns -1.
22+ */
23+ public static int ternarySearch (int [] arr , int key , int start , int end ) {
24+ if (start > end ){
25+ return -1 ;
26+ }
27+ /* First boundary: add 1/3 of length to start */
28+ int mid1 = start + (end - start ) / 3 ;
29+ /* Second boundary: add 2/3 of length to start */
30+ int mid2 = start + 2 * (end - start ) / 3 ;
31+ if (arr [mid1 ] == key ) {
32+ return mid1 ;
33+ }
34+ else if (arr [mid2 ] == key ) {
35+ return mid2 ;
36+ }
37+
38+ /* Search the first (1/3) rd part of the array.*/
39+
40+ else if (key < arr [mid1 ]) {
41+ return ternarySearch (arr , key , start , mid1 - 1 );
42+ }
43+ /* Search 3rd (1/3)rd part of the array */
44+
45+ else if (key > arr [mid2 ]) {
46+ return ternarySearch (arr , key , mid2 + 1 , end );
47+ }
48+ /* Search middle (1/3)rd part of the array */
49+
50+ else {
51+ return ternarySearch (arr , key , mid1 , mid2 );
52+ }
53+ }
54+
55+ public static void main (String [] args ) {
56+ Scanner s = new Scanner (System .in );
57+ System .out .println ("Enter number of elements in the array" );
58+ int n = s .nextInt ();
59+ int arr [] = new int [n ];
60+ System .out .println ("Enter the elements of the Sorted array" );
61+ for (int i = 0 ; i < n ; i ++){
62+ arr [i ] = s .nextInt ();
63+ }
64+ System .out .println ("Enter element to search for : " );
65+ int k = s .nextInt ();
66+ int ans = ternarySearch (arr , k );
67+ if (ans == -1 ) {
68+ System .out .println (" The element is not present in the array." );
69+ }
70+ else {
71+ System .out .println ("The element is present at the position " + (ans +1 ));
72+ }
73+ }
74+ }
0 commit comments