java/assignments/assignment3/NumberSorter.java
2024-12-23 03:12:44 +03:00

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