diff --git a/DSA/java/MergeSort.java b/DSA/java/MergeSort.java new file mode 100644 index 0000000..ee5daa0 --- /dev/null +++ b/DSA/java/MergeSort.java @@ -0,0 +1,50 @@ +import java.util.ArrayList; +import java.util.Arrays; + +public class MergeSort { + public static void main(String[] args) { + int[] arr = {5,4,3,2,1}; + mergeSort(arr,0, arr.length-1); + System.out.println(Arrays.toString(arr)); + } + + static void mergeSort(int[] arr,int low,int high){ + if(low>=high){ + return; + } + int mid = (low + high)/2; + mergeSort(arr,low,mid); + mergeSort(arr,mid+1,high); + merge(arr,low,mid,high); + + } + + static void merge(int[] arr, int low, int mid, int high) { + ArrayList ans = new ArrayList<>(); + int left = low; + int right = mid+1; + while(left<=mid && right <=high){ + if(arr[left]<=arr[right]){ + ans.add(arr[left]); + left++; + } + else { + ans.add(arr[right]); + right++; + } + } + while(left <= mid){ + ans.add(arr[left]); + left++; + } + + while(right <= high){ + ans.add(arr[right]); + right++; + } + + for (int i = low; i <= high; i++) { + arr[i] = ans.get(i - low); + } + } +} diff --git a/DSA/java/QuickSort.java b/DSA/java/QuickSort.java new file mode 100644 index 0000000..9910e55 --- /dev/null +++ b/DSA/java/QuickSort.java @@ -0,0 +1,47 @@ + + + +import java.util.Arrays; + +public class QuickSort { + public static void main(String[] args) { + int[] arr = {10,1,3,9,8}; + sort(arr, 0, arr.length - 1); + System.out.println(Arrays.toString(arr)); + } + + static void sort(int[] nums, int low, int hi) { + if (low >= hi) { + return; + } + + int s = low; + int e = hi; + int m = s + (e - s) / 2; + int pivot = nums[m]; + + while (s <= e) { + + // also a reason why if its already sorted it will not swap + while (nums[s] < pivot) { + s++; + } + + while (nums[e] > pivot) { + e--; + } + + if (s <= e) { + int temp = nums[s]; + nums[s] = nums[e]; + nums[e] = temp; + s++; + e--; + } + } + + // now my pivot is at correct index, please sort two halves now + sort(nums, low, e); + sort(nums, s, hi); + } +}