Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. public class Array{
  2.  
  3.     public static void mergesort(int []list){
  4.         if(list.length-1>0){
  5.             int middle=list.length/2;
  6.             int []leftList=new int[middle];
  7.             int []rightList=new int[list.length-middle];
  8.  
  9.             divide(list,leftList,rightList);//divide list into two array - left 'n' right
  10.  
  11.             mergesort(leftList);//recursive for left side
  12.             mergesort(rightList);//recursive for right side
  13.  
  14.             merge(list,leftList,rightList);//merge
  15.         }
  16.     }
  17.  
  18.     public static void divide(int []list,int []leftList,int []rightList){
  19.         int middle=list.length/2;
  20.         int left=0,right=0;
  21.         for(int i=0;i<middle;i++){//left side array
  22.             leftList[i]=list[i];
  23.         }
  24.         for(int i=middle;i<list.length;i++){//right side array
  25.             rightList[i-middle]=list[i];
  26.         }
  27.     }
  28.  
  29.     public static  void merge(int []list,int []leftList,int []rightList){
  30.         int left=0;int right=0;
  31.         for(int i=0;left<leftList.length&&right<rightList.length;i++){//copy left n right into list - increasing order
  32.             if(leftList[left]>rightList[right]){
  33.                 list[i]=rightList[right];
  34.                 right++;
  35.             }
  36.             else{
  37.                 list[i]=leftList[left];
  38.                 left++;
  39.             }
  40.         }
  41.         for(int i=left;i<leftList.length;i++){//copy the rest of left into list
  42.             list[i+right]=leftList[i];
  43.         }
  44.         for(int i=right;i<rightList.length;i++){//copy the rest of right into list
  45.             list[i+left]=rightList[i];
  46.         }
  47.  
  48.     }
  49. }