JavaAlgorithms/Sorts/CocktailShakerSort.java

87 lines
1.7 KiB
Java
Raw Normal View History

2017-10-24 05:36:37 +08:00
/**
*
* @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 <T extends Comparable<T>> void CS(T array[], int last) {
2017-10-24 07:01:02 +08:00
2017-10-24 05:36:37 +08:00
// Sorting
boolean swap;
do {
swap = false;
2017-10-24 07:01:02 +08:00
2017-10-24 05:36:37 +08:00
//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;
}
}
2017-10-24 07:01:02 +08:00
//break if no swap occurred
if (!swap) {
2017-10-24 05:36:37 +08:00
break;
}
swap = false;
2017-10-24 07:01:02 +08:00
2017-10-24 05:36:37 +08:00
//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--;
2017-10-24 07:01:02 +08:00
//end
} while (swap);
2017-10-24 05:36:37 +08:00
}
// 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");
}
}
}