77 lines
2.1 KiB
Java
77 lines
2.1 KiB
Java
// Define the NumberSorter interface
|
|
interface NumberSorter {
|
|
void sortNumbers(int[] array);
|
|
}
|
|
|
|
// BubbleSort class implementing the NumberSorter interface
|
|
class BubbleSort implements NumberSorter {
|
|
@Override
|
|
public void sortNumbers(int[] array) {
|
|
int n = array.length;
|
|
for (int i = 0; i < n - 1; i++) {
|
|
for (int j = 0; j < n - i - 1; j++) {
|
|
if (array[j] < array[j + 1]) {
|
|
// Swap array[j] and array[j + 1]
|
|
int temp = array[j];
|
|
array[j] = array[j + 1];
|
|
array[j + 1] = temp;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// MergeSort class implementing the NumberSorter interface
|
|
class MergeSort implements NumberSorter {
|
|
@Override
|
|
public void sortNumbers(int[] array) {
|
|
mergeSort(array, 0, array.length - 1);
|
|
}
|
|
|
|
// Helper function for merge sort
|
|
private void mergeSort(int[] array, int left, int right) {
|
|
if (left < right) {
|
|
int mid = (left + right) / 2;
|
|
mergeSort(array, left, mid); // Sort the left half
|
|
mergeSort(array, mid + 1, right); // Sort the right half
|
|
merge(array, left, mid, right); // Merge the sorted halves
|
|
}
|
|
}
|
|
|
|
// Merging two halves of the array in descending order
|
|
private void merge(int[] array, int left, int mid, int right) {
|
|
int n1 = mid - left + 1;
|
|
int n2 = right - mid;
|
|
|
|
int[] leftArray = new int[n1];
|
|
int[] rightArray = new int[n2];
|
|
|
|
System.arraycopy(array, left, leftArray, 0, n1);
|
|
System.arraycopy(array, mid + 1, rightArray, 0, n2);
|
|
|
|
int i = 0, j = 0, k = left;
|
|
while (i < n1 && j < n2) {
|
|
if (leftArray[i] > rightArray[j]) {
|
|
array[k] = leftArray[i];
|
|
i++;
|
|
} else {
|
|
array[k] = rightArray[j];
|
|
j++;
|
|
}
|
|
k++;
|
|
}
|
|
|
|
while (i < n1) {
|
|
array[k] = leftArray[i];
|
|
i++;
|
|
k++;
|
|
}
|
|
|
|
while (j < n2) {
|
|
array[k] = rightArray[j];
|
|
j++;
|
|
k++;
|
|
}
|
|
}
|
|
}
|