Advertisement
Guest User

Sort.java

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