如果我使用如下所示的插入排序,并且有一個陣列,其中一些元素是整數,然后一些元素為空 - 我將如何使用插入排序在末尾使用空元素對該陣列進行排序?
例如:[1, 2, 6, null, 9, 5, 4, null, 2, 3] 到: [1, 2, 2, 3, 4, 5, 6, 9, null, null]
public static <T extends Comparable<? super T>> void
insertionSort(T[] array) {
for (int sorted = 0; // only the first element is sorted
sorted < array.length - 1;
sorted ) {
T newElement = array[sorted 1];
int compareTo = sorted;
while (compareTo >= 0 &&
newElement.compareTo(array[compareTo]) < 0) {
array[compareTo 1] = array[compareTo];
compareTo--;
}
array[compareTo 1] = newElement;
}
}
uj5u.com熱心網友回復:
一種選擇是撰寫一個compareTo函式來處理null:
public static <T extends Comparable<? super T>> int compareTo(T a, T b)
{
if (a == null && b == null) return 0;
if (a == null) return 1;
if (b == null) return -1;
return a.compareTo(b);
}
然后讓插入排序使用:
while (compareTo >= 0 && compareTo(newElement, array[compareTo]) < 0) {
uj5u.com熱心網友回復:
可以通過以下方式完成Comparator.nullsLast:
public static <T extends Comparable<? super T>> void insertionSort(T[] array) {
Comparator<T> comparator = Comparator.nullsLast(Comparator.naturalOrder());
// ...
int compareTo = sorted;
while (compareTo >= 0 && comparator.compare(newElement, array[compareTo]) < 0) {
// ...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398266.html
