3.Write a Java program that sorts an array of integers using multiple threads.
💡Code:
import java.util.Arrays; class program3 { private static final int ARRAY_SIZE = 400; private static final int NUM_THREADS = 4; public static void main(String[] args) { int[] array = createArray(); System.out.println("Before sorting: " + Arrays.toString(array)); Thread[] threads = new Thread[NUM_THREADS]; int segmentSize = ARRAY_SIZE / NUM_THREADS; for (int i = 0; i < NUM_THREADS; i++) { int startIndex = i * segmentSize; int endIndex = (i == NUM_THREADS - 1) ? ARRAY_SIZE - 1 : (startIndex + segmentSize - 1); threads[i] = new Thread(new SortTask(array, startIndex, endIndex)); threads[i].start(); } for (Thread thread: threads) { try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } mergeSort(array, 0, ARRAY_SIZE - 1); System.out.println("After sorting: " + Arrays.toString(array)); } private static int[] createArray() { int[] array = new int[ARRAY_SIZE]; for (int i = 0; i < ARRAY_SIZE; i++) { array[i] = (int)(Math.random() * 400); // Generate random numbers between 0 and 400 } return array; } private static void mergeSort(int[] array, int left, int right) { if (left < right) { int mid = (left + right) / 2; mergeSort(array, left, mid); mergeSort(array, mid + 1, right); merge(array, left, mid, right); } } private static void merge(int[] array, int left, int mid, int right) { int[] temp = new int[right - left + 1]; int i = left, j = mid + 1, k = 0; while (i <= mid && j <= right) { if (array[i] <= array[j]) { temp[k++] = array[i++]; } else { temp[k++] = array[j++]; } } while (i <= mid) { temp[k++] = array[i++]; } while (j <= right) { temp[k++] = array[j++]; } System.arraycopy(temp, 0, array, left, temp.length); } static class SortTask implements Runnable { private int[] array; private int startIndex; private int endIndex; public SortTask(int[] array, int startIndex, int endIndex) { this.array = array; this.startIndex = startIndex; this.endIndex = endIndex; } @Override public void run() { Arrays.sort(array, startIndex, endIndex + 1); } } }
📸Output :
