class SortMethods {
public SortMethods() {
}
public int[] bubbleSort(int[] array) {
for(int i = 0; i<array.length; i++) {
for( int j = 1; j<array.length - i; j++) {
if (array[j] < array[j-1]) {
int value = array[j];
array[j] = array[j-1];
array[j-1] = value;
}
}
}
return array;
}
public int[] selectionSort(int[] array) {
for(int i = 0; i<array.length; i++) {
Integer minimum = Integer.MAX_VALUE;
int minimumIndex = 0;
for( int j = i + 1; j<array.length; j++) {
if (array[j] < minimum) {
minimum = array[j];
minimumIndex = j;
}
}
int value = array[i];
if (minimum < value) {
array[i] = array[minimumIndex];
array[minimumIndex] = value;
}
}
return array;
}
public int[] insertionSort(int[] array) {
for (int i = 1; i<array.length; i++) {
int value = array[i];
int index = 0;
for (int j = i - 1; j >= 0; j--) {
if (value < array[j]) {
array[j+1] = array[j];
} else {
index = j + 1;
break;
}
if (j == 0) {
index = j;
}
}
array[index] = value;
}
return array;
}
public void mergeSort(int[] a, int n) {
if (n < 2) {
return;
}
int mid = n / 2;
int[] l = new int[mid];
int[] r = new int[n - mid];
for (int i = 0; i < mid; i++) {
l[i] = a[i];
}
for (int i = mid; i < n; i++) {
r[i - mid] = a[i];
}
this.mergeSort(l, mid);
this.mergeSort(r, n - mid);
this.merge(a, l, r, mid, n - mid);
}
public void merge(int[] a, int[] l, int[] r, int left, int right) {
int i = 0, j = 0, k = 0;
while (i < left && j < right) {
if (l[i] <= r[j]) {
a[k++] = l[i++];
}
else {
a[k++] = r[j++];
}
}
while (i < left) {
a[k++] = l[i++];
}
while (j < right) {
a[k++] = r[j++];
}
}
}
class SortTester {
public static void test() {
SortMethods sorter = new SortMethods();
int[] array = {14, 12, 18, 20, 2};
int[] bubbleSorted = sorter.bubbleSort(array);
for(int i = 0; i < bubbleSorted.length; i++) {
System.out.print(bubbleSorted[i]);
System.out.print(",");
}
System.out.println();
int[] array2 = {14, 12, 18, 20, 2};
int[] selectionSorted = sorter.selectionSort(array2);
for(int i = 0; i < selectionSorted.length; i++) {
System.out.print(selectionSorted[i]);
System.out.print(",");
}
System.out.println();
int[] array3 = {8, 10, 9, 2, 1};
int[] insertionSorted = sorter.insertionSort(array3);
for(int i = 0; i < insertionSorted.length; i++) {
System.out.print(insertionSorted[i]);
System.out.print(",");
}
System.out.println();
int[] array4 = {1, 2, 8, 9, 10};
// sorter.mergeSort(array4);
for(int i = 0; i < array4.length; i++) {
System.out.print(array4[i]);
System.out.print(",");
}
System.out.println();
}
}
SortTester.test();