You are on page 1of 17

/** required package class namespace */

package searchsort;
;

/** required imports */


import collections.
.LinkedList;

/**
.java - useful methods for searching through arrays and
* Searcher. d lists
* of generic data for a specific item
* @author Mr. Wachs
* @param <T> the generic object used in this class
* @since Feb 9, 2017
* @instructor Mr. Wachs
*/
public class Searcher <T extends Comparable<T>>
{

/** indicates the item being searched for is not found */


public final int NOT_FOUND = -1;

/**
* an implementation of a linear search (sequential search)
* algorithm
m. It will find the first occurance of an item
* in the LinkedList and return the index where it found it, or a
* -1 if not found
* @param item the generic data type to search for in the list
* @param array an array of generic items to search through
* @return the first index found at, or a -1 if not found
*/
public int linearSearch(TT item, T[] array) {
for (int i = 0; i < array.length; i++) {
if (array[i].equals(item)) {
return i;
}
}
return NOT_FOUND;
}

/**
* an implementation of a linear search (sequential search)
* algorithm
m. It will find the first occurance of an item
* in the LinkedList and return the index where it found it, or a
* -1 if not found
* @param item the generic data type to search for in the list
* @param list the LinkedList to search through
* @return the first index found at, or a -1 if not found
*/
public int linearSearch(T
T item, LinkedList<T> list) {
return recursiveLinearSearch(item, list, 0);
}

/**
* an implementation of a binary search (sequential search)
* algorithm
m. It will find the first occurance of an item
* in the LinkedList and return the index where it found it, or a
* -1 if not found
* @param item the generic data type to search for in the list
* @param array an array of generic items to search through
* @return the first index found at, or a -1 if not found
*/
public int binarySearch(TT item, T[] array) {
int high = array.length - 1;
int low = 0;
while (low <= high) {
int mid = (high + low) / 2;
if (array[mid].compareTo(item) == 0) return mid;
else if (array[mid].compareTo(item) > 0) high = mid - 1;
else if (array[mid].compareTo(item) < 0) low = mid + 1;
}
return NOT_FOUND;
}

/**
* an implementation of a binary search (sequential search)
* algorithm
m. It will find the first occurance of an item
* in the LinkedList and return the index where it found it, or a
* -1 if not found
* @param item the generic data type to search for in the list
* @param list the LinkedList to search through
* @return the first index found at, or a -1 if not found
*/
public int binarySearch(TT item, LinkedList<T> list) {
return recursiveBinarySearch(item,list,0,list.size());
}

/**
* recursive methodd to find
d the first occurance of an item
* in the LinkedList andd return the index where it found
d it, or a
* -1 if not found
* @param item the generic data type to search for in the list
* @param list the LinkedList to search through
* @param i the current index location
* @return the first index found at, or a -1 if not found
*/
private int recursiveLinearSearch(T item, LinkedList<<T> list,
, int i) {
if (i == list.size()) return NOT_FOUND;
else if (item.equals(list.get(i))) return i;
else return recursiveLinearSearch(item,list,i+1);
}

/**
* recursive methodd usedd to find
d the item
m in the list and
d
* return the index of it's location or a -1 if not found
* @param item the generic data type to search for in the list
* @param list the LinkedList to search through
* @param low the lowest index to start from
* @param high the highest index to go to
* @return the first index found at, or a -1 if not found
*/
private int recursiveBinarySearch(T item, LinkedList< <T> list,
,
int low, int high) {
if (low <= high) {
int mid = low + (high - low) / 2;
if (list.get(mid) == null) return NOT_FOUND;
if (list.get(mid).compareTo(item) > 0)
return recursiveBinarySearch(item,list,low,mid-1);
else if (list.get(mid).compareTo(item) < 0)
return recursiveBinarySearch(item,list,mid+1,high);
else
return mid;
}
return NOT_FOUND;
}

}
/** required package class namespace */
package searchsort;
;

/** required imports */


import collections.
.LinkedList;

/**
.java - useful methods for sorting arrays and
* Sorter. d lists
* @author Mr. Wachs
* @param <T> the generic object used in this class
* @since Feb 9, 2017
* @instructor Mr. Wachs
*/
public class Sorter <T extends Comparable<T>>
{

/**
* a simple implementation of a bubble sort algorithm
* it will sort the array into ascending order
* @param array the array of generic items to sort
*/
public void bubbleSort(TT[] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length - 1; j++) {
T item1 = array[j];
T item2 = array[j+1];
if (item1.compareTo(item2) > 0) {
array[j] = item2;
array[j+1] = item1;
}
}
}
}

/**
* an efficient implementation of a bubble sort algorithm
* it will sort the list into ascending order
* @param list the LinkedList to sort
*/
public void bubbleSort(L
LinkedList<T> list) {
boolean sorted = true;
for (int i = list.size() - 1; i >= 0; i--) {
sorted = true;
for (int j = 0; j < i; j++) {
T item1 = list.get(j);
T item2 = list.get(j+1);
if (item1.compareTo(item2) > 0) {
sorted = false;
list.set(j, item2);
list.set(j+1, item1);
}
}
if (sorted) return;
}
}

/**
* an implementation of a selection sort algorithm
* it will sort the array into ascending order
* @param array the array of generic items to sort
*/
public void selectionSort(T T[] array) {
for (int i = 0; i < array.length-1; i++) {
int lowest = i;
for (int j = i + 1; j < array.length; j++) {
if (array[j].compareTo(array[lowest]) < 0) {
lowest = j;
}
}
if (lowest != i) {
T temp = array[i];
array[i] = array[lowest];
array[lowest] = temp;
}
}
}

/**
* an implementation of a selection sort algorithm
* it will sort the list into ascending order
* @param list the LinkedList to sort
*/
public void selectionSort(LLinkedList<T
T> list)
) {
for (int i = 0; i < list.size()-1; i++) {
int lowest = i;
for (int j = i + 1; j < list.size(); j++) {
T item1 = list.get(j);
T item2 = list.get(lowest);
if (item1.compareTo(item2) < 0) {
lowest = j;
}
}
if (lowest != i) {
T temp1 = list.get(i);
T temp2 = list.get(lowest);
list.set(i, temp2);
list.set(lowest, temp1);
}
}
}

}
/** required package class namespace */
package testing.
.searchsort;

/** required imports */


import searchsort.
.Searcher;

/**
.java - the testing done on the Searcher class
* SearchTest.
* @author Mr. Wachs
* @since Mar 1, 2017
* @instructor Mr. Wachs
*/
public class SearchTest
{

/** default constructor for the class */


public SearchTest() {
System.
.out.println("\nSearching Test starting........\n");
bigTest(();
System.
.out.println("\nSearching Test completed........\n");
}

/** the large test on a variety of data types */


private void bigTest() {
Searcher search = new Searcher();
System.
.out.p
println(
("Linear Search Tests...\n");
SearchSortTest.resetListAndArrayData();
System.
.out.p
println(
("The current lists and arrays...\n");
SearchSortTest.outputListAndArrayData());
SearchSortTest.randomSearchItems();
SearchSortTest.locationSearchItems());
int result1 = search.linearSearch(SearchSortTest.item1,
SearchSortTest.list1);
int result2 = search.linearSearch(SearchSortTest.item2,
SearchSortTest.list2);
int result3 = search.linearSearch(SearchSortTest.item3,
SearchSortTest.list3);
int result4 = search.linearSearch(SearchSortTest.item4,
SearchSortTest.list4);
int result5 = search.linearSearch(SearchSortTest.item5,
SearchSortTest.list5);
int result6 = search.linearSearch(SearchSortTest.item6,
SearchSortTest.array1);
int result7 = search.linearSearch(SearchSortTest.item7,
SearchSortTest.array2);
int result8 = search.linearSearch(SearchSortTest.item8,
SearchSortTest.array3);
int result9 = search.linearSearch(SearchSortTest.item9,
SearchSortTest.array4);
int result10 = search.linearSearch(SearchSortTest.item10,
SearchSortTest.array5);
int result11 = search.linearSearch(SearchSortTest.item11,
SearchSortTest.list1);
int result12 = search.linearSearch(SearchSortTest.item12,
SearchSortTest.list2);
int result13 = search.linearSearch(SearchSortTest.item13,
SearchSortTest.list3);
int result14 = search.linearSearch(SearchSortTest.item14,
SearchSortTest.list4);
int result15 = search.linearSearch(SearchSortTest.item15,
SearchSortTest.list5);
int result16 = search.linearSearch(SearchSortTest.item16,
SearchSortTest.array1);
int result17 = search.linearSearch(SearchSortTest.item17,
SearchSortTest.array2);
int result18 = search.linearSearch(SearchSortTest.item18,
SearchSortTest.array3);
int result19 = search.linearSearch(SearchSortTest.item19,
SearchSortTest.array4);
int result20 = search.linearSearch(SearchSortTest.item20,
SearchSortTest.array5);
System.
.out.println("\nSearching for random data...\n");
SearchSortTest.results("
"Search 1 of List 1", ,
SearchSortTest.item1, result1);
;
SearchSortTest.results("
"Search 2 of List 2", ,
SearchSortTest.item2, result2);
;
SearchSortTest.results("
"Search 3 of List 3", ,
SearchSortTest.item3, result3);
;
SearchSortTest.results("
"Search 4 of List 4", ,
SearchSortTest.item4, result4);
;
SearchSortTest.results("
"Search 5 of List 5", ,
SearchSortTest.item5, result5);
;
SearchSortTest.results("
"Search 6 of Array 1",,
SearchSortTest.item1, result6);
;
SearchSortTest.results("
"Search 7 of Array 2",,
SearchSortTest.item2, result7);
;
SearchSortTest.results("
"Search 8 of Array 3",,
SearchSortTest.item3, result8);
;
SearchSortTest.results("
"Search 9 of Array 4",,
SearchSortTest.item4, result9);
;
SearchSortTest.results("
"Search 10 of Array 5",
,
SearchSortTest.item5, result10);;
System.
.out.println("\nSearching for found data...\n");
SearchSortTest.results("
"Search 11 of List 1",,
SearchSortTest.item6, result11);;
SearchSortTest.results("
"Search 12 of List 2", ,
SearchSortTest.item7, result12);;
SearchSortTest.results("
"Search 13 of List 3", ,
SearchSortTest.item8, result13);;
SearchSortTest.results("
"Search 14 of List 4", ,
SearchSortTest.item9, result14);;
SearchSortTest.results("
"Search 15 of List 5", ,
SearchSortTest.item10,result15);;
SearchSortTest.results("
"Search 16 of Array 1",,
SearchSortTest.item11,result16);;
SearchSortTest.results("
"Search 17 of Array 2",,
SearchSortTest.item12,result17);;
SearchSortTest.results("
"Search 18 of Array 3",,
SearchSortTest.item13,result18);;
SearchSortTest.results("
"Search 19 of Array 4",,
SearchSortTest.item14,result19);;
SearchSortTest.results("
"Search 20 of Array 5",,
SearchSortTest.item15,result20);;
System.
.out.println("\nBinary Search Tests...\n"));
SearchSortTest.resetListAndArrayData();
SearchSortTest.sortAllListsAndArrays();
System.
.out.p
println(
("The current lists and arrays...\n");
SearchSortTest.outputListAndArrayData());
SearchSortTest.randomSearchItems();
SearchSortTest.locationSearchItems());
result1 = search.binarySearch(SearchSortTest.item1,
SearchSortTest.list1);
result2 = search.binarySearch(SearchSortTest.item2,
SearchSortTest.list2);
result3 = search.binarySearch(SearchSortTest.item3,
SearchSortTest.list3);
result4 = search.binarySearch(SearchSortTest.item4,
SearchSortTest.list4);
result5 = search.binarySearch(SearchSortTest.item5,
SearchSortTest.list5);
result6 = search.binarySearch(SearchSortTest.item6,
SearchSortTest.array1);
result7 = search.binarySearch(SearchSortTest.item7,
SearchSortTest.array2);
result8 = search.binarySearch(SearchSortTest.item8,
SearchSortTest.array3);
result9 = search.binarySearch(SearchSortTest.item9,
SearchSortTest.array4);
result10 = search.binarySearch(SearchSortTest.item10,
SearchSortTest.array5);
result11 = search.binarySearch(SearchSortTest.item11,
SearchSortTest.list1);
result12 = search.binarySearch(SearchSortTest.item12,
SearchSortTest.list2);
result13 = search.binarySearch(SearchSortTest.item13,
SearchSortTest.list3);
result14 = search.binarySearch(SearchSortTest.item14,
SearchSortTest.list4);
result15 = search.binarySearch(SearchSortTest.item15,
SearchSortTest.list5);
result16 = search.binarySearch(SearchSortTest.item16,
SearchSortTest.array1);
result17 = search.binarySearch(SearchSortTest.item17,
SearchSortTest.array2);
result18 = search.binarySearch(SearchSortTest.item18,
SearchSortTest.array3);
result19 = search.binarySearch(SearchSortTest.item19,
SearchSortTest.array4);
result20 = search.binarySearch(SearchSortTest.item20,
SearchSortTest.array5);
System.
.out.println("\nSearching for random data...\n");
SearchSortTest.results("
"Search 21 of List 1", ,
SearchSortTest.item1, result1);
;
SearchSortTest.results("
"Search 22 of List 2", ,
SearchSortTest.item2, result2);
;
SearchSortTest.results("
"Search 23 of List 3", ,
SearchSortTest.item3, result3);
;
SearchSortTest.results("
"Search 24 of List 4", ,
SearchSortTest.item4, result4);
;
SearchSortTest.results("
"Search 25 of List 5", ,
SearchSortTest.item5, result5);
;
SearchSortTest.results("
"Search 26 of Array 1", ,
SearchSortTest.item1, result6);
;
SearchSortTest.results("
"Search 27 of Array 2", ,
SearchSortTest.item2, result7);
;
SearchSortTest.results("
"Search 28 of Array 3", ,
SearchSortTest.item3, result8);
;
SearchSortTest.results("
"Search 29 of Array 4", ,
SearchSortTest.item4, result9);
;
SearchSortTest.results("
"Search 30 of Array 5",
,
SearchSortTest.item5, result10);;
System.
.out.println("\nSearching for found data...\n");
SearchSortTest.results("
"Search 31 of List 1",,
SearchSortTest.item6, result11);;
SearchSortTest.results("
"Search 32 of List 2",,
SearchSortTest.item7, result12);;
SearchSortTest.results("
"Search 33 of List 3",,
SearchSortTest.item8, result13);;
SearchSortTest.results("
"Search 34 of List 4",,
SearchSortTest.item9, result14);;
SearchSortTest.results("
"Search 35 of List 5",,
SearchSortTest.item10,result15);
;
SearchSortTest.results("
"Search 36 of Array 1",
,
SearchSortTest.item11,result16);
;
SearchSortTest.results("
"Search 37 of Array 2",
,
SearchSortTest.item12,result17);
;
SearchSortTest.results("
"Search 38 of Array 3",
,
SearchSortTest.item13,result18);
;
SearchSortTest.results("
"Search 39 of Array 4",
,
SearchSortTest.item14,result19);
;
SearchSortTest.results("
"Search 40 of Array 5",
,
SearchSortTest.item15,result20);
;
}

}
/** required package class namespace */
package testing.
.searchsort;

/** required imports */


import searchsort.
.Sorter;

/**
.java - the testing done on the Sorter class
* SortTest.
* @author Mr. Wachs
* @since Mar 1, 2017
* @instructor Mr. Wachs
*/
public class SortTest
{

/** default constructor for the class */


public SortTest() {
System.
.out.println("\nSorting Test starting........\n");
bigTest(();
System.
.out.println("\nSorting Test completed........\n");
}

/** the large test on a variety of data types */


private void bigTest() {
Sorter sorter = new Sorter();
System.
.out.p
println(
("Reseting Bubble Sorting Data...");
SearchSortTest.resetListAndArrayData();
SearchSortTest.outputListAndArrayData();
System.
.out.p
println(
("Bubble Sorting Data...");
sorter.
.bubbleSort(SearchSortTest.array1);
sorter.
.bubbleSort(SearchSortTest.array2);
sorter.
.bubbleSort(SearchSortTest.array3);
sorter.
.bubbleSort(SearchSortTest.array4);
sorter.
.bubbleSort(SearchSortTest.array5);
sorter.
.bubbleSort(SearchSortTest.list1);
sorter.
.bubbleSort(SearchSortTest.list2);
sorter.
.bubbleSort(SearchSortTest.list3);
sorter.
.bubbleSort(SearchSortTest.list4);
sorter.
.bubbleSort(SearchSortTest.list5);
SearchSortTest.outputListAndArrayData()
);
System.
.out.p
println(
("Reseting Selection Sorting Data...");
SearchSortTest.resetListAndArrayData();
SearchSortTest.outputListAndArrayData()
);
System.
.out.p
println(
("Selection Sorting Data...");
sorter.
.selectionSort(SearchSortTest.array1);
sorter.
.selectionSort(SearchSortTest.array2);
sorter.
.selectionSort(SearchSortTest.array3);
sorter.
.selectionSort(SearchSortTest.array4);
sorter.
.selectionSort(SearchSortTest.array5);
sorter.
.selectionSort(SearchSortTest.list1);
sorter.
.selectionSort(SearchSortTest.list2);
sorter.
.selectionSort(SearchSortTest.list3);
sorter.
.selectionSort(SearchSortTest.list4);
sorter.
.selectionSort(SearchSortTest.list5);
SearchSortTest.outputListAndArrayData();
}

}
/** required package class namespace */
package testing.
.searchsort;

/** required imports */


import collections..LinkedList;
import numbers.
.Random;
import searchsort.
.Sorter;

/**
.java - the testing done on both searching and
* SearchSortTest. d sorting, and
* the support methods to do this
* @author Mr. Wachs
* @param <T> the generic object used in this class
* @since Mar 1, 2017
* @instructor Mr. Wachs
*/
public class SearchSortTest <T>
{

/** class constant property */


public static final int SIZE = 10;

/** class data properties */


public static LinkedList<Boolean> list1;
public static LinkedList<Integer> list2;
public static LinkedList<Double> list3;
public static LinkedList<Character> list4;
public static LinkedList<String> list5;
public static Boolean[] array1;
public static Integer[] array2;
public static Double[] array3;
public static Character[] array4;
public static String[] array5;
public static Boolean item1;
public static Integer item2;
public static Double item3;
public static Character item4;
public static String item5;
public static Boolean item6;
public static Integer item7;
public static Double item8;
public static Character item9;
public static String item10;
public static Boolean item11;
public static Integer item12;
public static Double item13;
public static Character item14;
public static String item15;
public static Boolean item16;
public static Integer item17;
public static Double item18;
public static Character item19;
public static String item20;

/** default constructor for the class */


public SearchSortTest() {
System.
.out.println("\nSearching and Sorting Test starting........\n");
SearchTest searchTest = new SearchTest();
SortTest sortTest = new SortTest();
System.
.out.println("\nSearching and Sorting Test complete........\n");
}

/** resets all lists and arrays to random data */


public static void resetListAndArrayData() {
list1 = new LinkedList<>();
list2 = new LinkedList<>();
list3 = new LinkedList<>();
list4 = new LinkedList<>();
list5 = new LinkedList<>();
array1 = new Boolean[[SIZE];
array2 = new Integer[[SIZE];
array3 = new Double[
[SIZE];
array4 = new Character[SIZE];
array5 = new String[
[SIZE];
for (int i = 0; i < SIZE; i++) {
item1 = Random.generate();
item2 = Random.generate(0,SIZE-1);
item3 = Random.generate(00d,(double)(
(SIZE-1));
item4 = Random.generate('a','z');
item5 = Random.generate(SIZE);
list1.add(item1);
list2.add(item2);
list3.add(item3);
list4.add(item4);
list5.add(item5);
array1[i] = item1;
array2[i] = item2;
array3[i] = item3;
array4[i] = item4;
array5[i] = item5;
}
}

/** outputs all lists and arrays to the screen */


public static void outputListAndArrayData() {
System.
.out.p
println(
("List 1: " + list1);
System.
.out.p
println(
("List 2: " + list2);
System.
.out.p
println(
("List 3: " + list3);
System.
.out.p
println(
("List 4: " + list4);
System.
.out.p
println(
("List 5: " + list5);
System.
.out.p
println(
("Array 1: " + output(array1));
System.
.out.p
println(
("Array 2: " + output(array2));
System.
.out.p
println(
("Array 3: " + output(array3));
System.
.out.p
println(
("Array 4: " + output(array4));
System.
.out.p
println(
("Array 5: " + output(array5));
}

/** generates random data to search for in the lists and arrays */
public static void randomSearchItems() {
item1 = Random..generate();
item2 = Random..generate(0,SIZE-1);
item3 = Random..generate(0
0d,,(double)(
(SIZE-1));
item4 = Random..generate('a','z');
item5 = Random..generate(SIZE);
item6 = Random..generate();
item7 = Random..generate(0,SIZE-1);
item8 = Random..generate(0
0d,,(double)(
(SIZE-1));
item9 = Random..generate('a','z');
item10 = Random..generate(SIZE);
}

/** generates search data that is already in the lists and arrays */
public static void locationSearchItems() {
item11 = SearchSortTest.list1.get(R
Random.generate(0, SIZE-1));
item12 = SearchSortTest.list2.get(R
Random.generate(0, SIZE-1));
item13 = SearchSortTest.list3.get(R
Random.generate(0, SIZE-1));
item14 = SearchSortTest.list4.get(R
Random.generate(0, SIZE-1));
item15 = SearchSortTest.list5.get(R
Random.generate(0, SIZE-1
1));
item16 = SearchSortTest.array1[Random.generate(0, SIZE-1)];
item17 = SearchSortTest.array2[Random.generate(0, SIZE-1)];
item18 = SearchSortTest.array3[Random.generate(0, SIZE-1)];
item19 = SearchSortTest.array4[Random.generate(0, SIZE-1)];
item20 = SearchSortTest.array5[Random.generate(0, SIZE-1)];
}

/**
* outputs the search results
* @param <T> the generic object used in this class
* @param text which search results this is
* @param item the item being searched for
* @param location the result of the search
*/
public static <T> void results(S
String text,
, T item,
, int location)
) {
System.
.out.p
println(
(text + "\t result = " + location +
"\t for item " + item.toString());
}

/** sorts all lists and arrays for the binary search */
public static void sortAllListsAndArrays() {
Sorter sorter = new Sorter();
sorter.
.bubbleSort(SearchSortTest.array1);
sorter.
.bubbleSort(SearchSortTest.array2);
sorter.
.bubbleSort(SearchSortTest.array3);
sorter.
.bubbleSort(SearchSortTest.array4);
sorter.
.bubbleSort(SearchSortTest.array5);
sorter.
.bubbleSort(SearchSortTest.list1);
sorter.
.bubbleSort(SearchSortTest.list2);
sorter.
.bubbleSort(SearchSortTest.list3);
sorter.
.bubbleSort(SearchSortTest.list4);
sorter.
.bubbleSort(SearchSortTest.list5);
}

/**
* outputs the contents of an array on the screen
* @param <T> the generic object used in this class
* @param array the array to output
* @return the nicely formatted output of the array
*/
private static <T> String output(TT[] array)) {
String text = "[";
for (int i = 0; i < array.length-1; i++) {
text += array[i].toString() + ",";
}
return text + array[array.length-1].toString() + "]";
}

You might also like