Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package merge_sort;
- public class MergeSort implements Runnable{
- private static int[] array;
- private static int left;
- private static int right;
- private static int numThread;
- public MergeSort(int[] arrayToSort, int leftIndex, int rightIndex, int availableThreads) {
- numThread = availableThreads;
- numThread--;
- array = arrayToSort;
- left = leftIndex;
- right = rightIndex;
- }
- private static void merge(int[]array, int leftIndex, int middleIndex, int rightIndex) {
- int[] extraArray = new int[array.length];
- for(int i= leftIndex; i <= rightIndex; i++) {
- extraArray[i] = array[i];
- }
- int start1 = leftIndex;
- int start2 = middleIndex +1;
- int current = leftIndex;
- while(start1 <= middleIndex && start2 <= rightIndex) {
- if(extraArray[start1] <= extraArray[start2]) {
- array[current] = extraArray[start1];
- start1++;
- }
- else {
- array[current] = extraArray[start2];
- start2++;
- }
- current++;
- }
- while(start1 <= middleIndex) {
- array[current] = extraArray[start1];
- current++;
- start1++;
- }
- }
- @Override
- public void run() {
- if(numThread >=1){
- if(left < right){
- try{
- int middle = (left + right)/2;
- Thread firstHalf = new Thread(new MergeSort(array,left,right,numThread));
- Thread secondHalf = new Thread(new MergeSort(array,left,right,numThread));
- firstHalf.start();
- secondHalf.start();
- firstHalf.join();
- secondHalf.join();
- merge(array,left,middle,right);
- }
- catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- else {
- InsertionSort.sorts(array);
- System.out.println("Użycie sortowania przez wstawianie");
- }
- }
- }
- package merge_sort;
- import java.util.Arrays;
- public class Main {
- public volatile static int[] arrayToSort;
- public static int[] createArray(int n) {
- arrayToSort = new int[n];
- for (int i = 0; i < arrayToSort.length; i++) arrayToSort[i] = (int) (Math.random() * 100);
- return arrayToSort;
- }
- public static void main(String[] args) throws InterruptedException {
- int numThread = 5;
- int n = (int)(Math.random()*100);
- arrayToSort = createArray(n);
- System.out.println("Elementy tablicy przed sortowaniem:\n" + Arrays.toString(arrayToSort));
- //tworzenie wątków i sortowanie
- Thread first = new Thread(new MergeSort(arrayToSort,0,arrayToSort.length-1,numThread));
- first.start();
- first.join();
- System.out.println("Elementy tablicy po sortowaniu:\n" + Arrays.toString(arrayToSort));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement