From e9b1e2542b3473d6cc341e2a629be145e56d9ba9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 21 Aug 2017 11:20:04 -0700 Subject: [PATCH 1/2] Updated QuickSort.java Updated quicksort to its generic version and changed the filename according to convention --- Sorts/QuickSort.java | 93 +++++++++++++++++++++++++++++++++++++++ Sorts/Quicksort.java | 102 ------------------------------------------- 2 files changed, 93 insertions(+), 102 deletions(-) create mode 100644 Sorts/QuickSort.java delete mode 100644 Sorts/Quicksort.java diff --git a/Sorts/QuickSort.java b/Sorts/QuickSort.java new file mode 100644 index 000000000000..ec05938fa2c9 --- /dev/null +++ b/Sorts/QuickSort.java @@ -0,0 +1,93 @@ +/** + * + * @author Varun Upadhyay (https://github.com/varunu28) + * + */ + +class QuickSort { + + /** + * This method implements the Generic Quick Sort + * + * @param array The array to be sorted + * @param start The first index of an array + * @param end The last index of an array + * Sorts the array in increasing order + **/ + + public static > void QS(T array[], int start, int end) { + if (start < end) { + int PIndex = partition(array, start, end); + QS(array, start, PIndex - 1); + QS(array, PIndex + 1, end); + } + } + + /** + * This method finds the partition index for an array + * + * @param array The array to be sorted + * @param start The first index of an array + * @param end The last index of an array + * Finds the partition index of an array + **/ + + public static > int partition(T array[], int start, int end) { + T pivot = array[end]; + int PIndex = start; + for (int i=start;i> void swap(T[] array, int initial, int fin) { + T temp = array[initial]; + array[initial] = array[fin]; + array[fin] = temp; + } + + // Driver Program + public static void main(String[] args) { + + // For integer input + int[] arr = {3,4,1,32,0,2,44,111,5}; + Integer[] array = new Integer[arr.length]; + for (int i=0;i 0 1 2 3 4 5 32 44 111 + for (int i=0;i a b c d e + for(int i=0; i= 1){ - int pivot = ar[end]; - while (i< j){ - while (ar[i]=pivot && j>start){ - j--; - } - if (i Date: Fri, 25 Aug 2017 11:43:44 -0700 Subject: [PATCH 2/2] Updated MergeSort.java Updated MergeSort into its generic form --- Sorts/MergeSort.java | 155 ++++++++++++++++++++----------------------- 1 file changed, 73 insertions(+), 82 deletions(-) diff --git a/Sorts/MergeSort.java b/Sorts/MergeSort.java index f574281d65c0..b53451af806b 100644 --- a/Sorts/MergeSort.java +++ b/Sorts/MergeSort.java @@ -1,109 +1,100 @@ -import java.util.Scanner; - /** - * This class implements MergeSort - * @author Unknown + * + * @author Varun Upadhyay (https://github.com/varunu28) * */ -public class MergeSort { - /** Array for mergeSort*/ - private int[] array; - /** Temp Merge Array*/ - private int[] tempMergArr; - /** Length of the array*/ - private int length; - /** - * Sorts inputArr with merge sort algorithm - * - * @param inputArr Array to be sorted - */ - public final void sort(int inputArr[]) { - this.array = inputArr; - this.length = inputArr.length; - this.tempMergArr = new int[this.length]; - this.mergeSort(0, this.length - 1); - } +class MergeSort { /** - * Partitions Array into recursively smaller pieces + * This method implements the Generic Merge Sort * - * @param lowerIndex lower bound to include in the first partition - * @param higherIndex upper bound to include in the third partition - */ - private void mergeSort(int lowerIndex, int higherIndex) { - if (lowerIndex < higherIndex) { - int middle = lowerIndex + (higherIndex - lowerIndex) / 2; - // Below step sorts the left side of the array - this.mergeSort(lowerIndex, middle); - // Below step sorts the right side of the array - this.mergeSort(middle + 1, higherIndex); - // Now merge both sides - this.mergeParts(lowerIndex, middle, higherIndex); + * @param arr The array to be sorted + * @param temp The copy of the actual array + * @param left The first index of the array + * @param right The last index of the array + * Recursively sorts the array in increasing order + **/ + + public static > void MS(T[] arr, T[] temp, int left, int right) { + if (left < right) { + int mid = left + (right - left) / 2; + MS(arr, temp, left, mid); + MS(arr, temp,mid + 1, right); + merge(arr, temp, left, mid, right); } + } /** - * Merges partitions + * This method implements the merge step of the merge sort * - * @param lowerIndex The lower index - * @param middle The middle index - * @param higherIndex The higher index - */ - private void mergeParts(int lowerIndex, int middle, int higherIndex) { - for (int i = lowerIndex; i <= higherIndex; i++) { - this.tempMergArr[i] = this.array[i]; + * @param arr The array to be sorted + * @param temp The copy of the actual array + * @param left The first index of the array + * @param mid The middle index of the array + * @param right The last index of the array + * merges two parts of an array in increasing order + **/ + + public static > void merge(T[] arr, T[] temp, int left, int mid, int right) { + for (int i=left;i<=right;i++) { + temp[i] = arr[i]; } - int i = lowerIndex; - int j = middle + 1; - int k = lowerIndex; - while (i <= middle && j <= higherIndex) { - if (this.tempMergArr[i] <= this.tempMergArr[j]) { - this.array[k] = this.tempMergArr[i]; + + int i= left; + int j = mid + 1; + int k = left; + + while (i<=mid && j<=right) { + if (temp[i].compareTo(temp[j]) <= 0) { + arr[k] = temp[i]; i++; - } else { - this.array[k] = this.tempMergArr[j]; + } + else { + arr[k] = temp[j]; j++; } k++; } - while (i <= middle) { - this.array[k] = this.tempMergArr[i]; - k++; + + while (i <= mid) { + arr[k] = temp[i]; i++; + k++; } - } - /** - * Gets input to sort - * - * @return unsorted array of integers to sort - */ - public static int[] getInput() { - final int numElements = 6; - int[] unsorted = new int[numElements]; - Scanner input = new Scanner(System.in); - System.out.println("Enter any 6 Numbers for Unsorted Array : "); - for (int i = 0; i < numElements; i++) { - unsorted[i] = input.nextInt(); + // Driver program + public static void main(String[] args) { + + // Integer Input + int[] arr = {4,23,6,78,1,54,231,9,12}; + Integer[] array = new Integer[arr.length]; + for (int i=0;i 1 4 6 9 12 23 54 78 231 + for (int i=0;i a b c d e + for(int i=0; i