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

 

Leave a comment

Your comment