J'essaie de trier un nombre d'entiers en utilisant 4 threads, en séparant le tableau puis en le recombinant. Je pense que j'ai accompli en utilisant 2 threads, quelqu'un peut-il aider d'ici comment je passerais à l'utilisation de 4?Tri avec plusieurs threads
import java.util.Random;
import java.util.Arrays;
public class threadSort implements Runnable {
private static final int L = 64;
private static int[] nums;
private static Random rand;
public void run() {
//sorting upper half
Arrays.sort(nums, nums.length/2, nums.length);
}
public static void main(String args[]) throws InterruptedException {
nums = new int[L];
rand = new Random();
//fill the array
for(int i=0; i<nums.length; i++) {
nums[i] = rand.nextInt(10);
}
Thread t = new Thread(new threadSort());
t.start();
//sorting lower half
Arrays.sort(nums, 0, nums.length/2);
t.join();
/* merge */
int j = 0;
int k = nums.length/2;
int[] tmp = new int[nums.length];
for (int i=0; i<tmp.length; i++){
if (j < nums.length/2) {
if (k < nums.length) {
if (nums[j] < nums[k]) {
tmp[i] = nums[j++];
} else {
tmp[i] = nums[k++];
}
} else {
/* reached end of second half, copy first*/
tmp[i] = nums[j++];
}
} else {
/* reached end of 1st half, copy 2nd*/
tmp[i] = nums[k++];
}
}
nums = tmp;
//Testing Sort and Total
int count = 0;
for(int i=0; i<nums.length; i++){
System.out.print(nums[i] + " ");
count++;
}
System.out.println();
System.out.println("Total amount of Integers = " + count);
}
}
thats ce que j'ai jusqu'à présent Je veux rester avec ce que j'ai, mais jeter 2 autres fils dans
Je recommanderais une approche récursive pour permettre des tableaux de taille indéfinie. –
Eh bien, je voulais vraiment juste pour un tableau 64 ints. – Shonna
J'espère que c'est pour les devoirs ou l'éducation personnelle. Le tri de 64 éléments est typiquement (en fonction de l'implémentation du Comparateur) une opération si triviale que la surcharge dans la création de Threads et la synchronisation du modèle de mémoire devraient dépasser de loin tout gain de performance. –