Insertion sort and selection sort with test cases
Some checks failed
sample gradle build and test / build (pull_request) Failing after 1m18s
Some checks failed
sample gradle build and test / build (pull_request) Failing after 1m18s
This commit is contained in:
parent
fdca30f50a
commit
7ba2d22e43
@ -0,0 +1,36 @@
|
||||
package com.hithomelabs.clients.module5;
|
||||
|
||||
import com.hithomelabs.princeton1.module5.Insertion;
|
||||
import com.hithomelabs.princeton1.module5.Apple;
|
||||
import com.hithomelabs.princeton1.module5.Orange;
|
||||
|
||||
public class InsertionClient {
|
||||
|
||||
public static void main(String[] args){
|
||||
|
||||
Apple[] apples = new Apple[3];
|
||||
Orange[] oranges = new Orange[3];
|
||||
Insertion<Apple> insertion = new Insertion<>();
|
||||
|
||||
apples[0] = new Apple(3);
|
||||
apples[1] = new Apple(5);
|
||||
apples[2] = new Apple(4);
|
||||
insertion.sort(apples);
|
||||
|
||||
//* * Sample output
|
||||
for (int i = 0; i < apples.length; i++)
|
||||
System.out.println(apples[i]);
|
||||
|
||||
oranges[0] = new Orange(4);
|
||||
oranges[1] = new Orange(1);
|
||||
// * Should give runtime exception as ClassCastException is a runtime exception
|
||||
//insertion.sort(oranges);
|
||||
Insertion<Orange> selection2 = new Insertion<>();
|
||||
// * Should result in a compile time exception, as casting to Orange will fail
|
||||
//selection2.sort(apples);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package com.hithomelabs.clients.module5;
|
||||
|
||||
import com.hithomelabs.princeton1.module5.Selection;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class SelectionClient {
|
||||
|
||||
|
||||
|
||||
public static void main(String[] args){
|
||||
|
||||
Apple[] apples = new Apple[3];
|
||||
Orange[] oranges = new Orange[3];
|
||||
Selection<Apple> selection = new Selection<Apple>();
|
||||
|
||||
apples[0] = new Apple(3);
|
||||
apples[1] = new Apple(5);
|
||||
apples[2] = new Apple(4);
|
||||
selection.sort(apples);
|
||||
|
||||
//* * Sample output
|
||||
for (int i = 0; i < apples.length; i++)
|
||||
System.out.println(apples[i]);
|
||||
|
||||
oranges[0] = new Orange(4);
|
||||
oranges[1] = new Orange(1);
|
||||
// * Should give runtime exception as ClassCastException is a runtime exception
|
||||
//insertion.sort(oranges);
|
||||
Selection<Orange> selection2 = new Selection<Orange>();
|
||||
// * Should result in a compile time exception, as casting to Orange will fail
|
||||
//selection2.sort(apples);
|
||||
}
|
||||
|
||||
private static class Orange{
|
||||
private int size;
|
||||
Orange(int size){
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "An orange of size "+size;
|
||||
}
|
||||
}
|
||||
|
||||
private static class Apple implements Comparable<Apple>{
|
||||
private int size;
|
||||
|
||||
Apple(int size){
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "An apple of size "+size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Apple that) {
|
||||
if (this.size < that.size) return -1;
|
||||
else if (this.size == that.size)return 0;
|
||||
else return 1;
|
||||
}
|
||||
}
|
||||
}
|
19
module5/build.gradle
Normal file
19
module5/build.gradle
Normal file
@ -0,0 +1,19 @@
|
||||
plugins {
|
||||
id 'java'
|
||||
}
|
||||
|
||||
group = 'com.hithomelabs.princeton1.module5'
|
||||
version = 'unspecified'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
testImplementation platform('org.junit:junit-bom:5.10.0')
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter'
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.hithomelabs.princeton1.module5;
|
||||
|
||||
public abstract class AbstractCustomSorts<E> {
|
||||
|
||||
public abstract void sort(E[] arr);
|
||||
|
||||
public void exch(E[] arr, int j, int i) {
|
||||
E temp = arr[i];
|
||||
arr[i] = arr[j];
|
||||
arr[j] = temp;
|
||||
}
|
||||
|
||||
public boolean less(Comparable<E> e1, E e2) {
|
||||
return e1.compareTo(e2) < 0;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.hithomelabs.princeton1.module5;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class Apple implements Comparable<Apple> {
|
||||
private int size;
|
||||
|
||||
public Apple(int size) {
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if(this == obj) return true;
|
||||
if (obj == null || this.getClass() != obj.getClass())
|
||||
return false;
|
||||
Apple that = (Apple) obj;
|
||||
return Objects.equals(this.size, that.size);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(size);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "An apple of size " + size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Apple that) {
|
||||
if (this.size < that.size) return -1;
|
||||
else if (this.size == that.size) return 0;
|
||||
else return 1;
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.hithomelabs.princeton1.module5;
|
||||
|
||||
public class Insertion<E> extends AbstractCustomSorts<E> {
|
||||
|
||||
public void sort(E[] arr){
|
||||
if (arr == null) return;
|
||||
else{
|
||||
int N = arr.length;
|
||||
// * * swap arr[i] with each element greater to it's left
|
||||
for (int i = 1; i < N; i++){
|
||||
int j = i;
|
||||
while(j >= 1 && less((Comparable<E>)arr[j], arr[j-1])){
|
||||
exch(arr, j, j-1);
|
||||
j = j-1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
package com.hithomelabs.princeton1.module5;
|
||||
|
||||
public class Orange {
|
||||
private int size;
|
||||
|
||||
public Orange(int size) {
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "An orange of size " + size;
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.hithomelabs.princeton1.module5;
|
||||
|
||||
|
||||
public class Selection<E> extends AbstractCustomSorts<E>{
|
||||
|
||||
/*
|
||||
* * Selection sort "selects" the smallest element and swaps it with arr[0] of the array
|
||||
* * Then proceeds to do the same swapping arr[i] with arr[i:arr.length-1]
|
||||
*/
|
||||
public void sort(E[] arr){
|
||||
if (arr == null) return;
|
||||
Comparable<E>[] arr1 = (Comparable<E>[]) arr;
|
||||
for(int i = 0; i < arr1.length - 1; i++){
|
||||
int minIndex = i;
|
||||
for(int j = i+1; j < arr.length; j ++){
|
||||
if (less((Comparable<E>) arr[j], arr[minIndex])) minIndex = j;
|
||||
}
|
||||
exch(arr, i, minIndex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,56 @@
|
||||
package com.hithomelabs.princeton1.module5;
|
||||
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Random;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class InsertionTest {
|
||||
|
||||
private ArrayList<Apple> apples;
|
||||
private AbstractCustomSorts<Apple> sortingAlgorithm;
|
||||
private Random random;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
apples = new ArrayList<Apple>();
|
||||
//sortingAlgorithm = new Selection<Apple>();
|
||||
random = new Random();
|
||||
}
|
||||
|
||||
private void testSort(AbstractCustomSorts<Apple> sortingAlgorithm) {
|
||||
for (int i = 0; i < 100; i++)
|
||||
apples.add(new Apple(random.nextInt(100)));
|
||||
Apple[] arr = apples.toArray(new Apple[apples.size()]);
|
||||
apples.sort(null);
|
||||
Apple[] sorted = apples.toArray(new Apple[apples.size()]);
|
||||
sortingAlgorithm.sort(arr);
|
||||
assertArrayEquals(sorted, arr);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Testing Insertion sort functionality")
|
||||
public void testInsertionSort() {
|
||||
sortingAlgorithm = new Insertion<Apple>();
|
||||
testSort(sortingAlgorithm);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Testing Selection sort functionality")
|
||||
public void testSelectionSort() {
|
||||
sortingAlgorithm = new Selection<Apple>();
|
||||
testSort(sortingAlgorithm);
|
||||
}
|
||||
|
||||
|
||||
@AfterEach
|
||||
void tearDown() {
|
||||
sortingAlgorithm = null;
|
||||
apples = null;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user