Pages

Divide and Conquer Algorithm: MergeSort

04 July 2013

import java.util.*;
public class MergeSort {
   
    public static void main(String[] shan){
        while(true){
        Scanner input=new Scanner(System.in);
        int n=input.nextInt();
        int[] arr=new int[n];
        for(int i=0;i<n;i++)
            arr[i]=input.nextInt();
       
        Merge_sort(arr,0,arr.length-1);
        for(int i=0;i<arr.length;i++)
            System.out.printf("%d ", arr[i]);
        }
    }
   
    public static void Merge_sort(int[] arr,int low,int high){
       
        if(low<high){   
        int mid=(low+high)/2;
        Merge_sort(arr,low,mid);
        Merge_sort(arr,mid+1,high);
       
        Merge(arr,low,mid,high);
       
        }
    }
   
    public static void Merge(int[] arr,int l,int mid,int h){
    int len=arr.length;
        int[] b=new int[len];
        for(int i=0;i<len;i++)
            b[i]=arr[i];
       
        int st=l;
        int Midtem=mid+1;
       
        while(st<=mid && Midtem<=h){
           
            if(b[st]>=b[Midtem])
                arr[l++]=b[Midtem++];
            else
                arr[l++]=b[st++];       
        }
        while(st<=mid){
            arr[l++]=b[st++];
        }
        while(Midtem<=h){
            arr[l++]=b[Midtem++];
        }
    }
}

No comments:

Post a Comment