diff --git a/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedQueue.java b/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedQueue.java index e2d01e3..f4d83e9 100644 --- a/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedQueue.java +++ b/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedQueue.java @@ -25,11 +25,12 @@ public class LinkedQueue extends Queue{ @Override public E dequeue() { - if(isEmpty()) { + if(isEmpty()) return null; - } E currentValue = start.data; start = start.next; + if(isEmpty()) + end = null; return currentValue; } diff --git a/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedStack.java b/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedStack.java index d2d7536..97afc76 100644 --- a/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedStack.java +++ b/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedStack.java @@ -17,7 +17,6 @@ public class LinkedStack extends Stack{ } Node head = null; - Node endPtr = null; int stackLength = 0; @Override @@ -28,11 +27,8 @@ public class LinkedStack extends Stack{ @Override public void push(E element) { Node new_node = new Node(element); - if(stackLength == 0) - head = new_node; - else - endPtr.next = new_node; - endPtr = new_node; + new_node.next = head; + head = new_node; stackLength++; } @@ -40,15 +36,8 @@ public class LinkedStack extends Stack{ public E pop() { if(stackLength == 0) return null; - if(stackLength == 1) - head = null; - Node secondLastPtr = head; - while(secondLastPtr!=null && secondLastPtr.next != endPtr && secondLastPtr.next!=null) - secondLastPtr = secondLastPtr.next; - E currentValue = endPtr.data; - endPtr.next = null; - endPtr = secondLastPtr; - stackLength--; + E currentValue = head.data; + head = head.next; return currentValue; } 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 dd4086e..7d26813 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java +++ b/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java @@ -25,14 +25,23 @@ 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); + + int h = 1; + while(3*h + 1 < arr.length){ + h = 3*h + 1; } + while(h>=1){ + hsort(arr, h, metaData); + h= h/3; + } +// 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 void hsort(E[] arr, int h, MetaData metadata) { - for(int i=0; i=0; j=j-h){ metadata.compares++; diff --git a/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java b/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java index c4c5879..b541cb8 100644 --- a/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java +++ b/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java @@ -5,8 +5,11 @@ import com.hithomelabs.princeton1.module5.AbstractCustomSorts; import java.util.Arrays; public class Merge extends AbstractCustomSorts { + private E[] auxArr; + @Override public void sort(E[] arr) { + auxArr = (E[]) new Object[arr.length]; merge_sort(arr, 0, arr.length-1); } @@ -17,21 +20,18 @@ public class Merge extends AbstractCustomSorts { merge_sort(arr, mid_index + 1, high_index); // Copy array - E[] auxArr = (E[]) new Object[high_index - low_index + 1]; - int index = 0; for(int i=low_index; i<= high_index; i++) - auxArr[index++] = arr[i]; + auxArr[i] = arr[i]; // Sort - int low_index_ptr = 0; - int mid_index_ptr = (auxArr.length - 1)/2; + int low_index_ptr = low_index; + int mid_index_ptr = low_index + (high_index - low_index)/2; int high_index_ptr = mid_index_ptr + 1; if(!less((Comparable) auxArr[mid_index_ptr], auxArr[high_index_ptr])) { for (int i = low_index; i <= high_index; i++) { if (low_index_ptr > mid_index_ptr) { - arr[i] = auxArr[high_index_ptr]; - high_index_ptr++; - } else if (high_index_ptr >= auxArr.length) + arr[i] = auxArr[high_index_ptr++]; + } else if (high_index_ptr > high_index) arr[i] = auxArr[low_index_ptr++]; else if (less((Comparable) auxArr[low_index_ptr], auxArr[high_index_ptr])) arr[i] = auxArr[low_index_ptr++]; diff --git a/module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java b/module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java index de1358e..0f69460 100644 --- a/module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java +++ b/module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java @@ -34,23 +34,17 @@ public class Quick extends AbstractCustomSorts { while (i<=high && !less((Comparable) arr[low], arr[i])) i++; // Find the j index less than 1st element - while (!less((Comparable) arr[j], arr[low]) && j > low) + while (less((Comparable) arr[low], arr[j]) && j > low) j--; // Break if indexes are crossed - if(j <= i) + if(j < i) break; // Swap index values of i & j if(less((Comparable) arr[j], arr[i])) - exch(arr, i++, j--); + exch(arr, i, j); } // Swap 1st element to it's correct position - int k_index = low+1; - while (k_index <= high){ - if(less((Comparable) arr[low], arr[k_index])) - break; - k_index++; - } - exch(arr, low, k_index-1); - return k_index - 1; + exch(arr, low, j); + return j; } }