Advertisement
Karenira

PAI- zadanie 2b

Apr 3rd, 2020
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.06 KB | None | 0 0
  1. package merge_sort;
  2.  
  3. public class MergeSort implements Runnable{
  4.  
  5.     private static int[] array;
  6.     private static int left;
  7.     private static int right;
  8.     private static int numThread;
  9.  
  10.     public MergeSort(int[] arrayToSort, int leftIndex, int rightIndex, int availableThreads) {
  11.         numThread = availableThreads;
  12.         numThread--;
  13.         array = arrayToSort;
  14.         left = leftIndex;
  15.         right = rightIndex;
  16.     }
  17.  
  18.     private static void merge(int[]array, int leftIndex, int middleIndex, int rightIndex) {
  19.         int[] extraArray = new int[array.length];
  20.         for(int i= leftIndex; i <= rightIndex; i++) {
  21.             extraArray[i] = array[i];
  22.         }
  23.         int start1 = leftIndex;
  24.         int start2 = middleIndex +1;
  25.         int current = leftIndex;
  26.  
  27.         while(start1 <= middleIndex && start2 <= rightIndex) {
  28.             if(extraArray[start1] <= extraArray[start2]) {
  29.                 array[current] = extraArray[start1];
  30.                 start1++;
  31.             }
  32.             else {
  33.                 array[current] = extraArray[start2];
  34.                 start2++;
  35.             }
  36.             current++;
  37.         }
  38.         while(start1 <= middleIndex) {
  39.             array[current] = extraArray[start1];
  40.             current++;
  41.             start1++;
  42.         }
  43.     }
  44.  
  45.     @Override
  46.     public void run() {
  47.         if(numThread >=1){
  48.             if(left < right){
  49.                 try{
  50.                     int middle = (left + right)/2;
  51.                     Thread firstHalf = new Thread(new MergeSort(array,left,right,numThread));
  52.                     Thread secondHalf = new Thread(new MergeSort(array,left,right,numThread));
  53.                     firstHalf.start();
  54.                     secondHalf.start();
  55.                     firstHalf.join();
  56.                     secondHalf.join();
  57.                     merge(array,left,middle,right);
  58.                 }
  59.                 catch (InterruptedException e) {
  60.                     e.printStackTrace();
  61.                 }
  62.             }
  63.         }
  64.         else {
  65.             InsertionSort.sorts(array);
  66.             System.out.println("Użycie sortowania przez wstawianie");
  67.         }
  68.     }
  69. }
  70. package merge_sort;
  71.  
  72. import java.util.Arrays;
  73.  
  74. public class Main {
  75.     public volatile static int[] arrayToSort;
  76.  
  77.     public static int[] createArray(int n) {
  78.         arrayToSort = new int[n];
  79.         for (int i = 0; i < arrayToSort.length; i++) arrayToSort[i] = (int) (Math.random() * 100);
  80.         return arrayToSort;
  81.     }
  82.     public static void main(String[] args) throws InterruptedException {
  83.         int numThread = 5;
  84.         int n = (int)(Math.random()*100);
  85.         arrayToSort = createArray(n);
  86.         System.out.println("Elementy tablicy przed sortowaniem:\n" + Arrays.toString(arrayToSort));
  87.         //tworzenie wątków i sortowanie
  88.         Thread first = new Thread(new MergeSort(arrayToSort,0,arrayToSort.length-1,numThread));
  89.         first.start();
  90.         first.join();
  91.         System.out.println("Elementy tablicy po sortowaniu:\n" + Arrays.toString(arrayToSort));
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement