Advertisement
Guest User

Sort.java

a guest
Nov 4th, 2011
564
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.29 KB | None | 0 0
  1. package multithreadedmergesort;
  2.  
  3. /**
  4.  *
  5.  * @author Davidthefat
  6.  */
  7. public class Sort extends Thread
  8. {
  9.     private static String[] nums;
  10.     private static String[] temp; //Took the declaration out here
  11.     private static int num;
  12.  
  13.     public Sort(String[] m)
  14.     {
  15.         nums = m;
  16.         num = nums.length;
  17.         temp = new String[num];//Constructed it here
  18.         this.setName("Sort");
  19.     }
  20.     @Override
  21.     public void run()
  22.     {
  23.         mergesort(0, num - 1, 2);
  24.         temp = null;
  25.     }
  26.     public static void mergesort(int l, int h, int i)
  27.     {
  28.         if (l < h)
  29.         {
  30.             int m = (l + h) / 2;
  31.             if(i > 0)
  32.             {
  33.                 merger t1 = new merger(l, m, i - 1);
  34.                 merger t2 = new merger(m + 1, h, i - 1);
  35.                 t1.start();
  36.                 t2.start();
  37.                 try
  38.                 {
  39.                     t1.join();
  40.                     t2.join();
  41.                 }
  42.                 catch(InterruptedException e)
  43.                 {
  44.                     System.out.println(e.getMessage());
  45.                 }
  46.             }
  47.             else
  48.             {
  49.                 mergesort(l, m, 0);
  50.                 mergesort(m + 1, h, 0);
  51.             }
  52.             merge(l, m, h);
  53.         }
  54.     }
  55.     private static void merge(int l, int m, int h)
  56.     {
  57.         System.arraycopy(nums, l, temp, l, h - l + 1);
  58.         int i = l;
  59.         int j = m + 1;
  60.         int k = l;
  61.         while (i <= m && j <= h)
  62.         {
  63.                 if (temp[i].compareTo(temp[j]) < 0)
  64.                 {
  65.                         nums[k] = temp[i];
  66.                         i++;
  67.                 }
  68.                 else
  69.                 {
  70.                         nums[k] = temp[j];
  71.                         j++;
  72.                 }
  73.                 k++;
  74.         }
  75.         while (i <= m)
  76.         {
  77.                 nums[k] = temp[i];
  78.                 k++;
  79.                 i++;
  80.         }
  81.     }
  82. }
  83. class merger extends Thread
  84. {
  85.     private int l;
  86.     private int h;
  87.     private int i;
  88.     public merger(int lo, int hi, int in)
  89.     {
  90.         l = lo;
  91.         h = hi;
  92.         i = in;
  93.         this.setName("merger " + in);
  94.     }
  95.     @Override
  96.     public void run()
  97.     {
  98.         Sort.mergesort(l, h, i);
  99.     }
  100. }
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement