You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.0 KiB

// The SortingAlgs class that implements insertion sort and iterative merge sort
// your name here
public class SortingAlgs {
// card comparison
public int compares(Card c1, Card c2) {
if (c1.getSuit() < c2.getSuit())
return -1;
else if (c1.getSuit() > c2.getSuit())
return 1;
else {
if (c1.getRank() > c2.getRank())
return 1;
else if (c1.getRank() < c2.getRank())
return -1;
else
return 0;
}
}
// insertion sort
public void insertionSort(Card[] cardArray) {
for (int start = 1; start < cardArray.length; start++) {
int compare_to = start - 1;
int current = start;
while ((compare_to >= 0) && (compares(cardArray[compare_to], cardArray[current]) > 0)) {
Card temp = cardArray[current];
cardArray[current] = cardArray[compare_to];
cardArray[compare_to] = temp;
current = compare_to;
compare_to--;
}
}
}
// merge sort
public void mergeSort(Card[] cardArray) {
for (int run_length = 1; run_length <= cardArray.length - 1; run_length *= 2) {
int merged_size = run_length * 2;
for (int first = 0; first < cardArray.length - 1; first += merged_size) {
int mid = first + run_length - 1;
if (mid > cardArray.length - 1)
mid = cardArray.length - 1;
int last;
if (first + merged_size < cardArray.length) {
last = first + merged_size - 1;
}
else
last = cardArray.length - 1;
merge(cardArray, first, mid, last);
}
}
}
// merge two sorted arrays into one sorted array
public void merge(Card[] cardArray, int first, int mid, int last) {
Card[] aux1 = new Card[mid - first + 1];
Card[] aux2 = new Card[last - mid];
for (int i = 0; i < aux1.length; i++)
aux1[i] = cardArray[i + first];
for (int i = 0; i < aux2.length; i++)
aux2[i] = cardArray[i + mid + 1];
int main_index = first;
int l_index = 0;
int r_index = 0;
while ((l_index < aux1.length) && (r_index < aux2.length)) {
if (compares(aux1[l_index], aux2[r_index]) <= 0) {
cardArray[main_index] = aux1[l_index];
l_index++;
}
else {
cardArray[main_index] = aux2[r_index];
r_index++;
}
main_index++;
}
for (l_index = l_index; l_index < aux1.length; l_index++) {
cardArray[main_index] = aux1[l_index];
main_index++;
}
for (r_index = r_index; r_index < aux2.length; r_index++) {
cardArray[main_index] = aux2[r_index];
main_index++;
}
}
}