diff --git a/src/sorts/hybrid/BaseNMergeSort.java b/src/sorts/hybrid/BaseNMergeSort.java index f933c6bf..49846825 100644 --- a/src/sorts/hybrid/BaseNMergeSort.java +++ b/src/sorts/hybrid/BaseNMergeSort.java @@ -41,7 +41,7 @@ public BaseNMergeSort(ArrayVisualizer arrayVisualizer) { this.setRunSortName("Base-N Mergesort"); this.setCategory("Hybrid Sorts"); this.setComparisonBased(true); - this.setBucketSort(false); + this.setBucketSort(true); this.setRadixSort(false); this.setUnreasonablySlow(false); this.setUnreasonableLimit(0); diff --git a/src/sorts/select/BaseNMaxHeapSort.java b/src/sorts/select/BaseNMaxHeapSort.java new file mode 100644 index 00000000..bd8b2391 --- /dev/null +++ b/src/sorts/select/BaseNMaxHeapSort.java @@ -0,0 +1,47 @@ +package sorts.select; + +import main.ArrayVisualizer; +import sorts.templates.Sort; + +final public class BaseNMaxHeapSort extends Sort { + public BaseNMaxHeapSort(ArrayVisualizer arrayVisualizer) { + super(arrayVisualizer); + this.setSortListName("Base-N Max Heap"); + this.setRunAllSortsName("Base-N Max Heap Sort"); + this.setRunSortName("Base-N Max Heapsort"); + this.setCategory("Selection Sorts"); + this.setComparisonBased(true); + this.setBucketSort(true); + this.setRadixSort(false); + this.setUnreasonablySlow(false); + this.setUnreasonableLimit(0); + this.setBogoSort(false); + } + + private void siftDown(int[] arr, int base, int node, int stop) { + int left = node * base + 1; + if (left < stop) { + int maxIndex = left; + for (int i = left + 1; i < left + base; i++) { + if (i >= stop) + break; + if (Reads.compareValues(arr[maxIndex], arr[i]) == -1) + maxIndex = i; + } + if (Reads.compareValues(arr[node], arr[maxIndex]) == -1) { + Writes.swap(arr, node, maxIndex, 1, true, false); + this.siftDown(arr, base, maxIndex, stop); + } + } + } + + @Override + public void runSort(int[] arr, int length, int base) { + for (int i = length - 1; i > -1; i--) + this.siftDown(arr, base, i, length); + for (int i = length - 1; i > 0; i--) { + Writes.swap(arr, 0, i, 1, true, false); + this.siftDown(arr, base, 0, i); + } + } +} \ No newline at end of file diff --git a/src/threads/RunComparisonSort.java b/src/threads/RunComparisonSort.java index 74bdc4bf..5ca57135 100644 --- a/src/threads/RunComparisonSort.java +++ b/src/threads/RunComparisonSort.java @@ -126,6 +126,14 @@ public void run() { extra = 4; } } + else if (sort.getRunSortName().equals("Base-N Max Heapsort")) { + try { + extra = getCustomInput("Enter the base for this sort:"); + } + catch(Exception e) { + extra = 4; + } + } arrayVisualizer.setHeading(sort.getRunSortName()); arrayVisualizer.setCategory(sort.getCategory());