import java.io.BufferedReader; import java.io.FileReader; import java.util.*; class MergeSort { static void merge(int values[], int l, int m, int r) { int n1 = m - l + 1; int n2 = r - m; int L[] = new int[n1]; int R[] = new int[n2]; for (int i = 0; i < n1; ++i) L[i] = values[l + i]; for (int j = 0; j < n2; ++j) R[j] = values[m + 1 + j]; int i = 0, j = 0; int k = l; while (i < n1 && j < n2) { if (L[i] <= R[j]) { values[k] = L[i]; i++; } else { values[k] = R[j]; j++; } k++; } while (i < n1) { values[k] = L[i]; i++; k++; } while (j < n2) { values[k] = R[j]; j++; k++; } System.out.println(Arrays.toString(values).replace("[", "").replace("]", "").replace(" ", "")); } static void mergeSort(int[] values, int l, int r) { int n = values.length; if (l < r) { // Find the middle point int m = l + (r - l) / 2; // Sort first and second halves mergeSort(values, l, m); mergeSort(values, m + 1, r); // Merge the sorted halves merge(values, l, m, r); } } } class QuickSort { static int partition(int[] values, int low, int high) { int pivot = values[high]; int i = low - 1; for (int j = low; j <= high - 1; j++) { if (values[j] < pivot) { i++; swap(values, i, j); } } swap(values, i + 1, high); return i + 1; } static void swap(int[] values, int i, int j) { int temp = values[i]; values[i] = values[j]; values[j] = temp; } static void quick_sort(int[] values, int low, int high) { System.out.println(Arrays.toString(values).replace("[", "").replace("]", "").replace(" ", "")); if (low < high) { int pi = partition(values, low, high); quick_sort(values, low, pi - 1); quick_sort(values, pi + 1, high); } } } public class Sorting { static void insertion_sort(int[] values) { System.out.println(Arrays.toString(values).replace("[", "").replace("]", "").replace(" ", "")); int n = values.length; for (int i = 1; i < n; ++i) { int key = values[i]; int j = i - 1; while (j >= 0 && values[j] > key) { values[j + 1] = values[j]; j = j - 1; } values[j + 1] = key; System.out.println(Arrays.toString(values).replace("[", "").replace("]", "").replace(" ", "")); } System.out.println(Arrays.toString(values).replace("[", "").replace("]", "").replace(" ", "")); // Print out to CSV file ? } static void selection_sort(int[] values) { int n = values.length; System.out.println(Arrays.toString(values).replace("[", "").replace("]", "").replace(" ", "")); for (int i = 0; i < n - 1; i++) { int min = i; for (int j = i + 1; j < n; j++) { if (values[j] < values[min]) { min = j; } } if (min != i) { int temp = values[i]; values[i] = values[min]; values[min] = temp; System.out.println(Arrays.toString(values).replace("[", "").replace("]", "").replace(" ", "")); // Print out to CSV file ? } } System.out.println(Arrays.toString(values).replace("[", "").replace("]", "").replace(" ", "")); } public static void main(String[] args) { String csv_file = args[0]; String option = args[1]; try (BufferedReader reader = new BufferedReader(new FileReader(csv_file))) { String line = reader.readLine(); String[] values = line.split(","); int[] intArray = new int[values.length]; for (int i = 0; i < values.length; i++) { intArray[i] = Integer.parseInt(values[i].trim());; } switch (option) { case "1" -> insertion_sort(intArray); case "2" -> selection_sort(intArray); case "3" -> { QuickSort.quick_sort(intArray, 0, intArray.length - 1); System.out.println(Arrays.toString(intArray).replace("[", "").replace("]", "").replace(" ", "")); // Print out to CSV file ? } case "4" -> { System.out.println(Arrays.toString(intArray).replace("[", "").replace("]", "").replace(" ", "")); MergeSort.mergeSort(intArray, 0, intArray.length - 1); System.out.println(Arrays.toString(intArray).replace("[", "").replace("]", "").replace(" ", "")); } case null, default -> System.out.println("Invalid argument for option: must be between 1 and 4"); } } catch (Exception e) { e.printStackTrace(); } } }