Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package multithreadedmergesort;
- /**
- *
- * @author Davidthefat
- */
- public class Sort extends Thread
- {
- private static String[] nums;
- private static String[] temp; //Took the declaration out here
- private static int num;
- public Sort(String[] m)
- {
- nums = m;
- num = nums.length;
- temp = new String[num];//Constructed it here
- this.setName("Sort");
- }
- @Override
- public void run()
- {
- mergesort(0, num - 1, 2);
- temp = null;
- }
- public static void mergesort(int l, int h, int i)
- {
- if (l < h)
- {
- int m = (l + h) / 2;
- if(i > 0)
- {
- merger t1 = new merger(l, m, i - 1);
- merger t2 = new merger(m + 1, h, i - 1);
- t1.start();
- t2.start();
- try
- {
- t1.join();
- t2.join();
- }
- catch(InterruptedException e)
- {
- System.out.println(e.getMessage());
- }
- }
- else
- {
- mergesort(l, m, 0);
- mergesort(m + 1, h, 0);
- }
- merge(l, m, h);
- }
- }
- private static void merge(int l, int m, int h)
- {
- System.arraycopy(nums, l, temp, l, h - l + 1);
- int i = l;
- int j = m + 1;
- int k = l;
- while (i <= m && j <= h)
- {
- if (temp[i].compareTo(temp[j]) < 0)
- {
- nums[k] = temp[i];
- i++;
- }
- else
- {
- nums[k] = temp[j];
- j++;
- }
- k++;
- }
- while (i <= m)
- {
- nums[k] = temp[i];
- k++;
- i++;
- }
- }
- }
- class merger extends Thread
- {
- private int l;
- private int h;
- private int i;
- public merger(int lo, int hi, int in)
- {
- l = lo;
- h = hi;
- i = in;
- this.setName("merger " + in);
- }
- @Override
- public void run()
- {
- Sort.mergesort(l, h, i);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement