package com.company;
import com.sun.org.apache.xpath.internal.operations.Div;
import java.util.Random;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
class DivideTask extends RecursiveTask<int[]> {
int[] arrayToDivide;
final private int TRESHHOLD =100;
public DivideTask(int[] arrayToDivide) {
this.arrayToDivide = arrayToDivide;
}
protected int[] compute() {
if(arrayToDivide.length>1) {
int[] array_left = new int[arrayToDivide.length / 2];
int[] array_right = new int[arrayToDivide.length - array_left.length];
System.arraycopy(arrayToDivide, 0, array_left, 0, array_left.length);
System.arraycopy(arrayToDivide, array_left.length, array_right, 0, array_right.length);
DivideTask task1 = new DivideTask(array_left);
DivideTask task2 = new DivideTask(array_right);
task1.fork();
task2.fork();
//Wait for results from both tasks
int[] tab1 = task1.join();
int[] tab2 = task2.join();
int[] scal_tab = new int[tab1.length + tab2.length];
scal_tab(tab1, tab2, scal_tab);
return scal_tab;
}
return arrayToDivide;
}
private void scal_tab(
int[] tab1,
int[] tab2,
int[] scal_tab) {
int i = 0, j = 0, k = 0;
while ((i < tab1.length) && (j < tab2.length)) {
if (tab1[i] < tab2[j]) {
scal_tab[k] = tab1[i++];
} else {
scal_tab[k] = tab2[j++];
}
k++;
}
if (i == tab1.length) {
for (int a = j; a < tab2.length; a++) {
scal_tab[k++] = tab2[a];
}
} else {
for (int a = i; a < tab1.length; a++) {
scal_tab[k++] = tab1[a];
}
}
}
public static void main(String[] args){
int[] tab = randomTab();
System.out.println("PRZED SORTOWANIEM:\n");
printTab(tab);
DivideTask task = new DivideTask(tab);
ForkJoinPool forkJoinPool = new ForkJoinPool();
forkJoinPool.invoke(task);
int[] tab2 = task.join();
System.out.println("PO SORTOWANIU:\n");
printTab(tab2);
}
public static int[] randomTab(){
Random random = new Random();
int[] tab = new int[20];
for(int i =0;i<20;i++){
tab[i] = random.nextInt(1000);
}
return tab;
}
public static void printTab(int[] tab){
for(int i=0;i<tab.length;++i){
System.out.print(tab[i]+" ");
}
System.out.println();
}
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}