Replace the various swap method variants with SortUtils.swap (#5245)

Fix different variants of swap methods to SortUtils.swap

Co-authored-by: AlexKlm <alx@alx.com>
This commit is contained in:
Alex Klymenko 2024-06-22 11:18:39 +03:00 committed by GitHub
parent 8ef69bc854
commit e8f1990c8c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 16 additions and 42 deletions

View File

@ -45,7 +45,7 @@ public class DualPivotQuickSort implements SortAlgorithm {
*/ */
private static <T extends Comparable<T>> int[] partition(T[] array, int left, int right) { private static <T extends Comparable<T>> int[] partition(T[] array, int left, int right) {
if (array[left].compareTo(array[right]) > 0) { if (array[left].compareTo(array[right]) > 0) {
swap(array, left, right); SortUtils.swap(array, left, right);
} }
T pivot1 = array[left]; T pivot1 = array[left];
@ -58,7 +58,7 @@ public class DualPivotQuickSort implements SortAlgorithm {
while (less <= great) { while (less <= great) {
// If element is less than pivot1 // If element is less than pivot1
if (array[less].compareTo(pivot1) < 0) { if (array[less].compareTo(pivot1) < 0) {
swap(array, less, left++); SortUtils.swap(array, less, left++);
} }
// If element is greater or equal to pivot2 // If element is greater or equal to pivot2
@ -67,10 +67,10 @@ public class DualPivotQuickSort implements SortAlgorithm {
great--; great--;
} }
swap(array, less, great--); SortUtils.swap(array, less, great--);
if (array[less].compareTo(pivot1) < 0) { if (array[less].compareTo(pivot1) < 0) {
swap(array, less, left++); SortUtils.swap(array, less, left++);
} }
} }
@ -79,19 +79,13 @@ public class DualPivotQuickSort implements SortAlgorithm {
j--; j--;
great++; great++;
// Bring the pivots to their appropriate positions // Bring the pivots to their appropriate positions
swap(array, left, j); SortUtils.swap(array, left, j);
swap(array, right, great); SortUtils.swap(array, right, great);
// return the pivots' indices // return the pivots' indices
return new int[] {less, great}; return new int[] {less, great};
} }
private static <T extends Comparable<T>> void swap(T[] array, int left, int right) {
T temp = array[left];
array[left] = array[right];
array[right] = temp;
}
/** /**
* Main method * Main method
* *

View File

@ -32,16 +32,10 @@ class ExchangeSort implements SortAlgorithm {
for (int i = 0; i < array.length - 1; i++) { for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) { for (int j = i + 1; j < array.length; j++) {
if (array[i].compareTo(array[j]) > 0) { if (array[i].compareTo(array[j]) > 0) {
swap(array, i, j); SortUtils.swap(array, i, j);
} }
} }
} }
return array; return array;
} }
private <T> void swap(T[] array, int i, int j) {
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
} }

View File

@ -16,12 +16,6 @@ public class IntrospectiveSort implements SortAlgorithm {
return a; return a;
} }
private static <T extends Comparable<T>> void swap(T[] a, int i, int j) {
T temp = a[i];
a[i] = a[j];
a[j] = temp;
}
private static <T extends Comparable<T>> void introSort(T[] a, int low, int high, int depth) { private static <T extends Comparable<T>> void introSort(T[] a, int low, int high, int depth) {
while (high - low > INSERTION_SORT_THRESHOLD) { while (high - low > INSERTION_SORT_THRESHOLD) {
if (depth == 0) { if (depth == 0) {
@ -37,16 +31,16 @@ public class IntrospectiveSort implements SortAlgorithm {
private static <T extends Comparable<T>> int partition(T[] a, int low, int high) { private static <T extends Comparable<T>> int partition(T[] a, int low, int high) {
int pivotIndex = low + (int) (Math.random() * (high - low + 1)); int pivotIndex = low + (int) (Math.random() * (high - low + 1));
swap(a, pivotIndex, high); SortUtils.swap(a, pivotIndex, high);
T pivot = a[high]; T pivot = a[high];
int i = low - 1; int i = low - 1;
for (int j = low; j <= high - 1; j++) { for (int j = low; j <= high - 1; j++) {
if (a[j].compareTo(pivot) <= 0) { if (a[j].compareTo(pivot) <= 0) {
i++; i++;
swap(a, i, j); SortUtils.swap(a, i, j);
} }
} }
swap(a, i + 1, high); SortUtils.swap(a, i + 1, high);
return i + 1; return i + 1;
} }
@ -67,7 +61,7 @@ public class IntrospectiveSort implements SortAlgorithm {
heapify(a, i, high - low + 1, low); heapify(a, i, high - low + 1, low);
} }
for (int i = high; i > low; i--) { for (int i = high; i > low; i--) {
swap(a, low, i); SortUtils.swap(a, low, i);
heapify(a, low, i - low, low); heapify(a, low, i - low, low);
} }
} }
@ -83,7 +77,7 @@ public class IntrospectiveSort implements SortAlgorithm {
largest = right; largest = right;
} }
if (largest != i) { if (largest != i) {
swap(a, i, largest); SortUtils.swap(a, i, largest);
heapify(a, largest, n, low); heapify(a, largest, n, low);
} }
} }

View File

@ -1,7 +1,5 @@
package com.thealgorithms.sorts; package com.thealgorithms.sorts;
import static com.thealgorithms.sorts.SortUtils.swap;
public class SelectionSort implements SortAlgorithm { public class SelectionSort implements SortAlgorithm {
/** /**
@ -22,7 +20,7 @@ public class SelectionSort implements SortAlgorithm {
} }
} }
if (minIndex != i) { if (minIndex != i) {
swap(arr, i, minIndex); SortUtils.swap(arr, i, minIndex);
} }
} }
return arr; return arr;

View File

@ -9,9 +9,7 @@ public class SimpleSort implements SortAlgorithm {
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
for (int j = i + 1; j < length; j++) { for (int j = i + 1; j < length; j++) {
if (SortUtils.less(array[j], array[i])) { if (SortUtils.less(array[j], array[i])) {
T element = array[j]; SortUtils.swap(array, i, j);
array[j] = array[i];
array[i] = element;
} }
} }
} }

View File

@ -20,9 +20,7 @@ public class SlowSort implements SortAlgorithm {
sort(array, i, m); sort(array, i, m);
sort(array, m + 1, j); sort(array, m + 1, j);
if (SortUtils.less(array[j], array[m])) { if (SortUtils.less(array[j], array[m])) {
T temp = array[j]; SortUtils.swap(array, j, m);
array[j] = array[m];
array[m] = temp;
} }
sort(array, i, j - 1); sort(array, i, j - 1);
} }

View File

@ -18,9 +18,7 @@ public class SwapSort implements SortAlgorithm {
int amountSmallerElements = this.getSmallerElementCount(array, index); int amountSmallerElements = this.getSmallerElementCount(array, index);
if (amountSmallerElements > 0 && index != amountSmallerElements) { if (amountSmallerElements > 0 && index != amountSmallerElements) {
T element = array[index]; SortUtils.swap(array, index, amountSmallerElements);
array[index] = array[amountSmallerElements];
array[amountSmallerElements] = element;
} else { } else {
index++; index++;
} }