Code improvements

This commit is contained in:
Kruti Shah 2025-02-12 23:58:08 +05:30
parent cc3fc5df3d
commit ca1391130d
5 changed files with 32 additions and 39 deletions

View File

@ -25,11 +25,12 @@ public class LinkedQueue<E> extends Queue<E>{
@Override @Override
public E dequeue() { public E dequeue() {
if(isEmpty()) { if(isEmpty())
return null; return null;
}
E currentValue = start.data; E currentValue = start.data;
start = start.next; start = start.next;
if(isEmpty())
end = null;
return currentValue; return currentValue;
} }

View File

@ -17,7 +17,6 @@ public class LinkedStack<E> extends Stack<E>{
} }
Node<E> head = null; Node<E> head = null;
Node<E> endPtr = null;
int stackLength = 0; int stackLength = 0;
@Override @Override
@ -28,11 +27,8 @@ public class LinkedStack<E> extends Stack<E>{
@Override @Override
public void push(E element) { public void push(E element) {
Node<E> new_node = new Node<E>(element); Node<E> new_node = new Node<E>(element);
if(stackLength == 0) new_node.next = head;
head = new_node; head = new_node;
else
endPtr.next = new_node;
endPtr = new_node;
stackLength++; stackLength++;
} }
@ -40,15 +36,8 @@ public class LinkedStack<E> extends Stack<E>{
public E pop() { public E pop() {
if(stackLength == 0) if(stackLength == 0)
return null; return null;
if(stackLength == 1) E currentValue = head.data;
head = null; head = head.next;
Node<E> secondLastPtr = head;
while(secondLastPtr!=null && secondLastPtr.next != endPtr && secondLastPtr.next!=null)
secondLastPtr = secondLastPtr.next;
E currentValue = endPtr.data;
endPtr.next = null;
endPtr = secondLastPtr;
stackLength--;
return currentValue; return currentValue;
} }

View File

@ -25,14 +25,23 @@ public class Shell<E> extends AbstractCustomSorts<E> {
@Override @Override
public void sort(E[] arr) { public void sort(E[] arr) {
MetaData metaData = new MetaData(); 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"); System.out.println("Array sorted (shell sort) with " + metaData.compares + " compares and " + metaData.swaps + " swaps");
} }
private void hsort(E[] arr, int h, MetaData metadata) { private void hsort(E[] arr, int h, MetaData metadata) {
for(int i=0; i<arr.length; i=i+h){ for(int i=h; i<arr.length; i=i+1){
int k = i; int k = i;
for(int j=i-h; j>=0; j=j-h){ for(int j=i-h; j>=0; j=j-h){
metadata.compares++; metadata.compares++;

View File

@ -5,8 +5,11 @@ import com.hithomelabs.princeton1.module5.AbstractCustomSorts;
import java.util.Arrays; import java.util.Arrays;
public class Merge<E> extends AbstractCustomSorts<E> { public class Merge<E> extends AbstractCustomSorts<E> {
private E[] auxArr;
@Override @Override
public void sort(E[] arr) { public void sort(E[] arr) {
auxArr = (E[]) new Object[arr.length];
merge_sort(arr, 0, arr.length-1); merge_sort(arr, 0, arr.length-1);
} }
@ -17,21 +20,18 @@ public class Merge<E> extends AbstractCustomSorts<E> {
merge_sort(arr, mid_index + 1, high_index); merge_sort(arr, mid_index + 1, high_index);
// Copy array // Copy array
E[] auxArr = (E[]) new Object[high_index - low_index + 1];
int index = 0;
for(int i=low_index; i<= high_index; i++) for(int i=low_index; i<= high_index; i++)
auxArr[index++] = arr[i]; auxArr[i] = arr[i];
// Sort // Sort
int low_index_ptr = 0; int low_index_ptr = low_index;
int mid_index_ptr = (auxArr.length - 1)/2; int mid_index_ptr = low_index + (high_index - low_index)/2;
int high_index_ptr = mid_index_ptr + 1; int high_index_ptr = mid_index_ptr + 1;
if(!less((Comparable<E>) auxArr[mid_index_ptr], auxArr[high_index_ptr])) { if(!less((Comparable<E>) auxArr[mid_index_ptr], auxArr[high_index_ptr])) {
for (int i = low_index; i <= high_index; i++) { for (int i = low_index; i <= high_index; i++) {
if (low_index_ptr > mid_index_ptr) { if (low_index_ptr > mid_index_ptr) {
arr[i] = auxArr[high_index_ptr]; arr[i] = auxArr[high_index_ptr++];
high_index_ptr++; } else if (high_index_ptr > high_index)
} else if (high_index_ptr >= auxArr.length)
arr[i] = auxArr[low_index_ptr++]; arr[i] = auxArr[low_index_ptr++];
else if (less((Comparable<E>) auxArr[low_index_ptr], auxArr[high_index_ptr])) else if (less((Comparable<E>) auxArr[low_index_ptr], auxArr[high_index_ptr]))
arr[i] = auxArr[low_index_ptr++]; arr[i] = auxArr[low_index_ptr++];

View File

@ -34,23 +34,17 @@ public class Quick<E> extends AbstractCustomSorts<E> {
while (i<=high && !less((Comparable<E>) arr[low], arr[i])) while (i<=high && !less((Comparable<E>) arr[low], arr[i]))
i++; i++;
// Find the j index less than 1st element // Find the j index less than 1st element
while (!less((Comparable<E>) arr[j], arr[low]) && j > low) while (less((Comparable<E>) arr[low], arr[j]) && j > low)
j--; j--;
// Break if indexes are crossed // Break if indexes are crossed
if(j <= i) if(j < i)
break; break;
// Swap index values of i & j // Swap index values of i & j
if(less((Comparable<E>) arr[j], arr[i])) if(less((Comparable<E>) arr[j], arr[i]))
exch(arr, i++, j--); exch(arr, i, j);
} }
// Swap 1st element to it's correct position // Swap 1st element to it's correct position
int k_index = low+1; exch(arr, low, j);
while (k_index <= high){ return j;
if(less((Comparable<E>) arr[low], arr[k_index]))
break;
k_index++;
}
exch(arr, low, k_index-1);
return k_index - 1;
} }
} }