Witam!
Jestem BARDZO początkującym programistą Javy i mam pewien problem. Otóż za zadanie miałem napisać program sortujący tablicę poprzez najpierw podzielenie jej na pół i później przez scalanie (merge sort) tak, aby operacje sortowania tych dwóch podtablic były odrębnymi wątkami.
Moje pytanie brzmi - jak powinienem zmodyfikować poniższy kod, aby program działał współbieżnie?
public class Sortowanie extends Thread {
int[] tablica;
int poczatek;
int koniec;
public Sortowanie(int[] tab, int pocz, int kon) {
this.tablica=tab;
this.poczatek=pocz;
this.koniec=kon;
}
private void sort(int[] tab) {
int i=poczatek;
int j=koniec/2;
int pom = 0;
while (i < koniec / 2 && j < koniec) {
if (tablica[i] < tablica[j]) {
tab[pom++] = tablica[i++];
} else {
tab[pom++] = tablica[j++];
}
}
while (i < koniec / 2) {
tab[pom++] = tablica[i++];
}
while (j < koniec) {
tab[pom++] = tablica[j++];
}
System.arraycopy(tablica, poczatek, tab, 0, koniec - poczatek);
}
public void sort2() {
int size = tablica.length - 1;
for (int i = 0; i < tablica.length - 1; i++) {
for (int j = 0; j < size; j++) {
if (tablica[j] > tablica[j + 1]) {
int temp = tablica[j];
tablica[j] = tablica[j + 1];
tablica[j + 1] = temp;
}
}
size = size - 1;
}
}
@Override
public void run() {
if ((koniec - poczatek) < 4) {
sort2();
return;
}
int[] t = new int[koniec];
Sortowanie sort1 = new Sortowanie(tablica, poczatek, poczatek + ((koniec-poczatek)/2));
Sortowanie sort2 = new Sortowanie(tablica, poczatek + ((koniec-poczatek)/2), koniec);
sort1.run();
sort2.run();
sort(t);
}
}
Pozdrawiam!