diff --git a/Sorting/AlgorithmTester.java b/Sorting/AlgorithmTester.java index 07e4102..07b6e6f 100644 --- a/Sorting/AlgorithmTester.java +++ b/Sorting/AlgorithmTester.java @@ -138,33 +138,33 @@ public class AlgorithmTester{ boolean quickTWP=sortingAlgoChoices[5]; boolean merge=sortingAlgoChoices[6]; ArrayList results = new ArrayList(); - + RandomNumberFileReader reader = new RandomNumberFileReader(filename); if(bubble){ - BubbleSorter bubSorter = new BubbleSorter(filename); + BubbleSorter bubSorter = new BubbleSorter(reader); results.add(bubSorter.measuredSort()); } if(selection){ - SelectionSorter selSorter = new SelectionSorter(filename); + SelectionSorter selSorter = new SelectionSorter(reader); results.add(selSorter.measuredSort()); } if(insertion){ - InsertionSorter inSorter = new InsertionSorter(filename); + InsertionSorter inSorter = new InsertionSorter(reader); results.add(inSorter.measuredSort()); } if(counting){ - CountingSorter countSorter = new CountingSorter(filename); + CountingSorter countSorter = new CountingSorter(reader); results.add(countSorter.measuredSort()); } if(quick){ - QuickSorter qSorter = new QuickSorter(filename); + QuickSorter qSorter = new QuickSorter(reader); results.add(qSorter.measuredSort()); } if(quickTWP){ - QuickSorterThreeWay qTWPSorter = new QuickSorterThreeWay(filename); + QuickSorterThreeWay qTWPSorter = new QuickSorterThreeWay(reader); results.add(qTWPSorter.measuredSort()); } if(merge){ - MergeSorter mSorter = new MergeSorter(filename); + MergeSorter mSorter = new MergeSorter(reader); results.add(mSorter.measuredSort()); } for(SortResult e: results){ @@ -174,7 +174,7 @@ public class AlgorithmTester{ } System.out.print("\n"); } - System.out.println("\n"+e.getSortType()+" of "+e.getSortCount()+" numbers took:"); + System.out.println("\n"+e.getSortType()+" of "+e.getSortCount()+" numbers with range "+e.getMin()+" to "+e.getMax()+" took:"); System.out.println(e.getComparisonsUsed()+" comparisons"); System.out.println(e.getWritesUsed()+" write operations"); System.out.println(e.getTimeUsed()+" milliseconds"); diff --git a/Sorting/BubbleSorter.java b/Sorting/BubbleSorter.java index edbf0a1..e52d162 100644 --- a/Sorting/BubbleSorter.java +++ b/Sorting/BubbleSorter.java @@ -3,8 +3,8 @@ package Sorting; public class BubbleSorter extends Sorter{ //a class to sort arrays of numbers using bubble sort - public BubbleSorter(String filename){ - super("bubble sort", filename); + public BubbleSorter(RandomNumberFileReader reader){ + super("bubble sort", reader); } void sort(){ diff --git a/Sorting/CountingSorter.java b/Sorting/CountingSorter.java index c5e2a79..2d2a31b 100644 --- a/Sorting/CountingSorter.java +++ b/Sorting/CountingSorter.java @@ -4,8 +4,8 @@ import java.util.Arrays; public class CountingSorter extends Sorter{ - public CountingSorter(String filename){ - super("counting sort", filename); + public CountingSorter(RandomNumberFileReader reader){ + super("counting sort", reader); } void sort(){ diff --git a/Sorting/InsertionSorter.java b/Sorting/InsertionSorter.java index aa781c3..1d61453 100644 --- a/Sorting/InsertionSorter.java +++ b/Sorting/InsertionSorter.java @@ -5,8 +5,8 @@ package Sorting; public class InsertionSorter extends Sorter{ - public InsertionSorter(String filename){ - super("insertion sort", filename); + public InsertionSorter(RandomNumberFileReader reader){ + super("insertion sort", reader); } void sort(){ diff --git a/Sorting/MergeSorter.java b/Sorting/MergeSorter.java index 4dbb5f7..045c993 100644 --- a/Sorting/MergeSorter.java +++ b/Sorting/MergeSorter.java @@ -2,8 +2,8 @@ package Sorting; public class MergeSorter extends Sorter{ - public MergeSorter(String filename){ - super("merge sort",filename); + public MergeSorter(RandomNumberFileReader reader){ + super("merge sort",reader); } void sort(){ @@ -28,41 +28,34 @@ public class MergeSorter extends Sorter{ void merge(int leftIndex, int middleIndex, int rightIndex){ int sizeLeft=middleIndex-leftIndex+1;//add 1 to include both endpoints int sizeRight=rightIndex-middleIndex;//both endpoints already included, as middleIndex is part of left array - int[] left=new int[sizeLeft]; - int[] right=new int[sizeRight]; + Integer[] left=new Integer[sizeLeft]; + Integer[] right=new Integer[sizeRight]; for(int i=0;i + { + try{ + writer.write(Integer.toString(num)); writer.newLine(); + }catch (IOException ex){ + System.out.println("An error occurred."); + } + }); + }catch (IOException ex){ + System.out.println("Could not make new file named "+filename); + } + } + + + //previous version retained for reference. + /* public void writeFile(){ try{ File randomNumbers = new File(filename); @@ -42,6 +68,6 @@ public class RandomNumberFileMaker { }catch (IOException ex){ System.err.println(ex); } - } + }*/ } \ No newline at end of file diff --git a/Sorting/RandomNumberFileReader.java b/Sorting/RandomNumberFileReader.java index cf33277..5040bc7 100644 --- a/Sorting/RandomNumberFileReader.java +++ b/Sorting/RandomNumberFileReader.java @@ -12,6 +12,17 @@ class RandomNumberFileReader{ private ArrayList numbers = new ArrayList(); public RandomNumberFileReader(String file){ + //reads text from file of integers, one on each line + //uses try-with-resources loop to automatically close BufferedReader + //uses Stream operations instead of while loop + try(BufferedReader reader = Files.newBufferedReader(Path.of(file));){ + reader.lines().mapToInt(Integer::parseInt).forEach(num -> numbers.add(num)); + }catch (IOException ex){ + System.err.println(ex); + } + + /* + //previous version retained for reference //Reads in from a text file of integers, one on each line try{ BufferedReader reader = Files.newBufferedReader(Path.of(file)); @@ -23,8 +34,9 @@ class RandomNumberFileReader{ } catch (IOException ex){ System.err.println(ex); } + */ } - + public ArrayList getNumbers(){ return numbers; } diff --git a/Sorting/SelectionSorter.java b/Sorting/SelectionSorter.java index 1add6fa..d545fdd 100644 --- a/Sorting/SelectionSorter.java +++ b/Sorting/SelectionSorter.java @@ -2,8 +2,8 @@ package Sorting; public class SelectionSorter extends Sorter { //a class to sort an array of numbers using selection sort - public SelectionSorter(String filename){ - super("selection sort", filename); + public SelectionSorter(RandomNumberFileReader reader){ + super("selection sort", reader); } void sort(){ diff --git a/Sorting/SortResult.java b/Sorting/SortResult.java index 1dc09a1..e339c7b 100644 --- a/Sorting/SortResult.java +++ b/Sorting/SortResult.java @@ -75,4 +75,14 @@ public class SortResult { return nf.format(sortedArray.length); } + public String getMin(){ + NumberFormat nf = NumberFormat.getInstance(Locale.US); + return nf.format(sortedArray[0]); + } + + public String getMax(){ + NumberFormat nf = NumberFormat.getInstance(Locale.US); + return nf.format(sortedArray[sortedArray.length-1]); + } + } \ No newline at end of file diff --git a/Sorting/Sorter.java b/Sorting/Sorter.java index bdb152d..dd0e9ab 100644 --- a/Sorting/Sorter.java +++ b/Sorting/Sorter.java @@ -15,9 +15,9 @@ abstract class Sorter { protected long comparisonsUsed = 0; protected long writesUsed=0; - public Sorter(String st, String filename){ + public Sorter(String st, RandomNumberFileReader reader){ sortType=st; - RandomNumberFileReader reader = new RandomNumberFileReader(filename); + //RandomNumberFileReader reader = new RandomNumberFileReader(filename); numbers = new Integer[reader.getNumbers().size()]; reader.getNumbers().toArray(numbers); }