Add merge sort with O(1) space (#2672)
This commit is contained in:
parent
a9b2420165
commit
83ecf56d94
75
Sorts/MergeSortNoExtraSpace.java
Normal file
75
Sorts/MergeSortNoExtraSpace.java
Normal 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]+" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user