Add merge sort with O(1) space (#2672)

This commit is contained in:
Shraddha 2021-10-24 12:36:59 +05:30 committed by GitHub
parent a9b2420165
commit 83ecf56d94
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -0,0 +1,75 @@
package Sorts;
import java.util.Arrays;
import java.util.*;
/*This code implements the mergeSort algorithm without extra space
For understanding about mergesort visit :https://www.geeksforgeeks.org/merge-sort/
*/
public class MergeSortNoExtraSpace {
public static void call_merge_sort(int a[],int n)
{
int maxele = Arrays.stream(a).max().getAsInt() + 1;
merge_sort(a,0,n-1,maxele);
}
public static void merge_sort(int a[],int start , int end,int maxele){ //this function divides the array into 2 halves
if(start<end){
int mid = (start +end)/2;
merge_sort(a, start,mid,maxele);
merge_sort(a,mid+1,end,maxele);
implement_merge_sort(a,start,mid,end,maxele);
}
}
public static void implement_merge_sort(int a[], int start , int mid , int end,int maxele){ //implementation of mergesort
int i=start;
int j=mid+1;
int k =start;
while (i<=mid && j<=end){
if(a[i]%maxele<=a[j]%maxele){
a[k] = a[k] + (a[i]
% maxele) * maxele;
k++;
i++;
}
else{
a[k] = a[k] + (a[j]
% maxele) * maxele;
k++;
j++;
}
}
while(i<=mid){
a[k] = a[k] + (a[i]
% maxele) * maxele;
k++;
i++;
}
while(j<=end){
a[k] = a[k] + (a[j]
% maxele) * maxele;
k++;
j++;
}
for(i=start;i<=end;i++)
{
a[i] = a[i] / maxele;
}
}
public static void main(String args[]) {
Scanner inp=new Scanner(System.in);
System.out.println("Enter array size");
int n=inp.nextInt();
int a[]=new int[n];
System.out.println("Enter array elements");
for(int i=0;i<n;i++)
{
a[i]=inp.nextInt();
}
call_merge_sort(a,n);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}