diff --git a/Sorts/CocktailShakerSort.java b/Sorts/CocktailShakerSort.java new file mode 100644 index 00000000..594ef1bf --- /dev/null +++ b/Sorts/CocktailShakerSort.java @@ -0,0 +1,82 @@ +package Sorts; + +/** + * + * @author Mateus Bizzo (https://github.com/MattBizzo) + * + */ + +class CocktailShakerSort { + /** + * This method implements the Generic Cocktail Shaker Sort + * + * @param array + * The array to be sorted + * @param last + * The count of total number of elements in array Sorts the array in + * increasing order + **/ + + public static > void CS(T array[], int last) { + // Sorting + boolean swap; + do { + swap = false; + //front + for (int count = 0; count <= last - 2; count++) { + int comp = array[count].compareTo(array[count + 1]); + if (comp > 0) { + T aux = array[count]; + array[count] = array[count + 1]; + array[count + 1] = aux; + swap = true; + } + } + if (!swap) { //break if no swap occurred + break; + } + swap = false; + //back + for (int count = last - 2; count >= 0; count--) { + int comp = array[count].compareTo(array[count + 1]); + if (comp > 0) { + T aux = array[count]; + array[count] = array[count + 1]; + array[count + 1] = aux; + swap = true; + } + } + last--; + } while (swap); //end + } + + // Driver Program + public static void main(String[] args) { + // Integer Input + int[] arr1 = { 4, 23, 6, 78, 1, 54, 231, 9, 12 }; + int last = arr1.length; + Integer[] array = new Integer[last]; + for (int i = 0; i < last; i++) { + array[i] = arr1[i]; + } + + CS(array, last); + + // Output => 1 4 6 9 12 23 54 78 231 + for (int i = 0; i < last; i++) { + System.out.print(array[i] + "\t"); + } + System.out.println(); + + // String Input + String[] array1 = { "c", "a", "e", "b", "d" }; + last = array1.length; + + CS(array1, last); + + // Output => a b c d e + for (int i = 0; i < last; i++) { + System.out.print(array1[i] + "\t"); + } + } +}