diff --git a/module5/src/main/java/com/hithomelabs/princeton1/module5/AbstractCustomSorts.java b/module5/src/main/java/com/hithomelabs/princeton1/module5/AbstractCustomSorts.java index 86bfbbd..6fa211b 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/AbstractCustomSorts.java +++ b/module5/src/main/java/com/hithomelabs/princeton1/module5/AbstractCustomSorts.java @@ -6,6 +6,9 @@ public abstract class AbstractCustomSorts { // TODO: Implement this method public void exch(E[] arr, int j, int i) { + E temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; } // TODO: Implement this method diff --git a/module5/src/main/java/com/hithomelabs/princeton1/module5/Insertion.java b/module5/src/main/java/com/hithomelabs/princeton1/module5/Insertion.java index a4117d4..c6faf70 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/Insertion.java +++ b/module5/src/main/java/com/hithomelabs/princeton1/module5/Insertion.java @@ -3,7 +3,13 @@ package com.hithomelabs.princeton1.module5; public class Insertion extends AbstractCustomSorts { @Override public void sort(E[] arr) { - + for(int i=1; i=0 && less((Comparable) arr[k], arr[j]); j--){ + exch(arr, k, j); + k = j; + } + } } } diff --git a/module5/src/main/java/com/hithomelabs/princeton1/module5/Selection.java b/module5/src/main/java/com/hithomelabs/princeton1/module5/Selection.java index d483434..4f8c1ff 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/Selection.java +++ b/module5/src/main/java/com/hithomelabs/princeton1/module5/Selection.java @@ -7,7 +7,14 @@ package com.hithomelabs.princeton1.module5; public class Selection extends AbstractCustomSorts{ @Override public void sort(E[] arr) { - + for (int i = 0; i < arr.length; i++) { + int minIndex = i; + for(int j = i+1; j < arr.length; j++){ + if(less((Comparable) arr[j], arr[minIndex])) + minIndex = j; + } + exch(arr, i, minIndex); + } } } diff --git a/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java b/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java index 21ce627..db432ea 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java +++ b/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java @@ -24,10 +24,29 @@ public class Shell extends AbstractCustomSorts { */ @Override public void sort(E[] arr) { + MetaData metaData = new MetaData(); + for(int i=arr.length/10; i>=0; i--){ + hsort(arr, 3*i+1, metaData); + } + System.out.println("Array sorted (shell sort) with " + metaData.compares + " compares and " + metaData.swaps + " swaps"); } - private int hsort(E[] arr, int h, MetaData metadata) { - return 0; + private void hsort(E[] arr, int h, MetaData metadata) { + for(int i=0; i=0; j=j-h){ + metadata.compares++; + if(less((Comparable) arr[k], arr[j])){ + exch(arr, k, j); + k = j; + metadata.swaps++; + } + else{ + break; + } + + } + } } /* ! sample implementation of insertion sort as h-sort of h = 1 @@ -36,7 +55,7 @@ public class Shell extends AbstractCustomSorts { public void insertionSort(E[] arr){ MetaData metaData = new MetaData(); int h = 1; - h = hsort(arr, h, metaData); + hsort(arr, h, metaData); System.out.println("Array sorted (insertion sort) with " + metaData.compares + " compares and " + metaData.swaps + " swaps"); }