// 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++; } } }