Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Scanner;
- public class SortMain {
- public static void main(String[] args) {
- int numValues = 0;
- int numTrials = 0;
- boolean validAnswer = false;
- ArrayList<Integer> toSort = new ArrayList<Integer>();
- ArrayList<String> times = new ArrayList<String>();
- Scanner scan = new Scanner(System.in);
- System.out.println("Please enter the number of values to add to the test list: ");
- numValues = scan.nextInt();
- //System.out.println(numValues);
- for(int x = 1; x <= numValues; x++){
- toSort.add(x);
- }
- //System.out.println(toSort);
- System.out.println("Please enter the number of trials you would like to do: ");
- numTrials = scan.nextInt() + 50;
- while(validAnswer == false){
- System.out.println("Please enter which type of sort you would like to do (ins or sel): ");
- String sortType = scan.next();
- if(sortType.equals("ins")){
- scan.close();
- validAnswer = true;
- // System.out.println("Unsorted " + toSort);
- shuffle(toSort);
- // System.out.println("1st Shuffle " + toSort);
- insertionSort(toSort, numTrials, times);
- //averageTime(times, sortType, numValues);
- dataFileHandler(times, sortType, String.valueOf(numValues), String.valueOf(numTrials));
- }
- else if(sortType.equals("sel")){
- scan.close();
- validAnswer = true;
- //System.out.println("Unsorted " + toSort);
- shuffle(toSort);
- //System.out.println("1st Shuffle " + toSort);
- selectionSort(toSort, numTrials, times);
- //averageTime(times, sortType, numValues);
- dataFileHandler(times, sortType, String.valueOf(numValues), String.valueOf(numTrials));
- }
- else{
- System.out.println("Input not recognized, please enter ins or sel");
- }
- }
- }
- public static void shuffle(ArrayList<Integer> arrayList){
- Collections.shuffle(arrayList);
- }
- public static void selectionSort(ArrayList<Integer> numbers, int trials, ArrayList<String> times){
- int min, temp;
- double totalTime = 0;
- for(int y = 0; y < trials; y++){
- for (int index = 0; index < numbers.size()-1; index++)
- {
- long startTime = System.nanoTime();
- min = index;
- for (int scan = index+1; scan < numbers.size(); scan++)
- if (numbers.get(scan) < numbers.get(min))
- min = scan;
- // Swap the values
- temp = numbers.get(min);
- numbers.set(min, numbers.get(index));
- numbers.set(index, temp);
- long endTime = System.nanoTime();
- totalTime += (endTime - startTime);
- }
- //System.out.println("Selection Sorted " + numbers);
- shuffle(numbers);
- // System.out.println("Post-Sort Reshuffle " + numbers);
- times.add((totalTime/1000000) + "");
- totalTime = 0;
- System.out.println(y);
- }
- }
- //broken atm
- public static void insertionSort(ArrayList<Integer> numbers, int trials, ArrayList<String> times){
- // System.out.println(numbers);
- double totalTime = 0;
- for(int y = 0; y < trials; y++){
- for(int x = 1; x < numbers.size(); x++){
- long startTime = System.nanoTime();
- int j = x;
- int temp = numbers.get(j);
- while(j > 0 && numbers.get(j-1) > temp){
- numbers.set(j, numbers.get(j-1));
- j--;
- }
- if(j != x){
- numbers.set(j, temp);
- }
- long endTime = System.nanoTime();
- totalTime += (endTime - startTime);
- }
- times.add((totalTime/1000000 + ""));
- totalTime = 0;
- // System.out.println(numbers);
- shuffle(numbers);
- // System.out.println(numbers);
- }
- }
- public static void averageTime(ArrayList<String> times, String sortType, int n){
- double total = 0;
- for(int x = 50; x < times.size(); x++){
- total += Double.parseDouble(times.get(x));
- }
- double average = total / (double)times.size();
- System.out.println("Average runtime over " + times.size() + " trials of " + n + " values using " + sortType + " sorting = " + average + " ms");
- }
- public static void dataFileHandler(ArrayList<String> times, String sortType, String n, String trials){
- File timesTxt = new File("timesList_" + sortType + "_" + n + "num_" + String.valueOf(Integer.parseInt(trials) - 50) + "trials.txt");
- try {
- timesTxt.createNewFile();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- try {
- BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("timesList_" + sortType + "_" + n + "num_" + String.valueOf(Integer.parseInt(trials) - 50) + "trials.txt")));
- try {
- writer.write("Num values " + n);
- writer.newLine();
- writer.write("Num trials " + (times.size() - 50));
- writer.newLine();
- writer.write("Sort Type " + sortType);
- for(int x = 50; x < times.size(); x++){
- writer.newLine();
- writer.write(n + " " + times.get(x));
- }
- writer.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- System.out.println("File generated at: " + timesTxt.getAbsolutePath());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement