Parallel Rank sort using Java Thread
In this post, I have included code that uses Java Threads to calculate ranks of numbers in list[] array and put then in respective position (determined by rank) in finallist[] array. It is a relaxed algorithm as none of the threads created interact with each other.
import java.util.Random; /* library file to generate random number */
public class ParallelRankSort {
int[] list = new int[10];
int finallist[] = new int[10];
final int n = 10;
public void initialize(){
Random r = new Random(10);
for(int i=0; i<n; i++){
list[n-1-i] =r.nextInt(50);
}
}
public void runThreads(){
Thread t[] = new Thread[n];
for(int i=0; i<n; i++){
FindRank f = new FindRank(list[i],list,finallist);
t[i] = new Thread(f);
t[i].start();
}
for(int i=0; i<n; i++){
try {
t[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void displayOutput(){
//initial data
System.out.println(”Initial data”);
for(int i=0; i<n; i++){
System.out.println(”list[" + i + "] = ” + list[i]);
}
System.out.println(”After sorting”);
System.out.println(”");
for(int i=0; i<n; i++){
System.out.println(”finalList[" + i + "] = ” + finallist[i]);
}
}
public static void main(String[] args){
ParallelRankSort p = new ParallelRankSort();
p.initialize();
p.runThreads();
p.displayOutput();
}
}
//Runnable classes to be run by threads created above
class FindRank implements Runnable{
int data;
int list[];
int finallist[];
FindRank(int data, int[] list, int finallist[]){
this.data = data;
this.list = list;
this.finallist = finallist;
}
public void run(){
int count =0 ;
for(int i=0; i<list.length; i++){
if(list[i]<data){
count++;
}
}
finallist[count] = data;
}
}
The output obtained is shown below.
Initial data
list[0] = 14
list[1] = 31
list[2] = 38
list[3] = 47
list[4] = 6
list[5] = 46
list[6] = 40
list[7] = 43
list[8] = 30
list[9] = 13
After sorting
finalList[0] = 6
finalList[1] = 13
finalList[2] = 14
finalList[3] = 30
finalList[4] = 31
finalList[5] = 38
finalList[6] = 40
finalList[7] = 43
finalList[8] = 46
finalList[9] = 47