Skip to content

Instantly share code, notes, and snippets.

@vslala
Created May 28, 2020 19:00
Show Gist options
  • Save vslala/6a2b83b1a53a2067e6780383c4855f56 to your computer and use it in GitHub Desktop.
Save vslala/6a2b83b1a53a2067e6780383c4855f56 to your computer and use it in GitHub Desktop.
Multi-threaded Code for generating time-complexity of elementary sorting algorithms
import com.bma.algorithms.sort.elementary.Util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import static java.util.Arrays.copyOf;
public class SortingAlgorithmComparision {
private int maxInputArrSize;
public SortingAlgorithmComparision(int maxInputArrSize) {
this.maxInputArrSize = maxInputArrSize;
}
private List<String> compare(int totalRun) throws InterruptedException {
List<Thread> workerThreads = new LinkedList<>();
List<String> stats = Collections.synchronizedList(new LinkedList<>());
stats.add("Input Size,Quick,Merge,BottomUpMerge,Shell,Insertion,Selection" + System.lineSeparator());
Random rand = new Random();
for (int i = 0; i < totalRun; i++) {
int inputSize = rand.nextInt(maxInputArrSize);
int input[] = Util.generateUnsortedArray(inputSize);
Thread t = new Thread(() -> {
StringBuilder sb = new StringBuilder();
sb.append(inputSize).append(",")
.append(Sort.quickSort(copyOf(input, input.length))).append("ms,")
.append(Sort.mergeSort(copyOf(input, input.length))).append("ms,")
.append(Sort.bottomUpMergeSort(copyOf(input, input.length))).append("ms,")
.append(Sort.shellSort(copyOf(input, input.length))).append("ms,")
.append(Sort.insertionSort(copyOf(input, input.length))).append("ms,")
.append(Sort.selectionSort(copyOf(input, input.length))).append("ms,")
.append(System.lineSeparator());
stats.add(sb.toString());
});
t.start();
Util.println(String.format("Thread<%d> started!", t.getId()));
workerThreads.add(t);
}
for (Thread workerThread : workerThreads)
workerThread.join();
return stats;
}
public void generateReport(int totalRun, String outputFileName) throws IOException, InterruptedException {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(new File(outputFileName)))) {
for (String line : compare(totalRun))
bw.write(line);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment