我在Java中有一个Double[] foo
。
是否有一个库函数告诉我这个数组是否已排序?我知道我可以构建这样的函数,但如果库函数可用,这不是一件好事。 java.util.Arrays
中没有任何内容,java.util.Collections
中似乎没有任何内容。
(在C ++中我们有std::is_sorted
并且假设Java库比C ++ 11更大,我想我可以使用它。
答案 0 :(得分:1)
据我所知,没有这样的功能。
值得注意的是,它实际上可能不需要更多时间来排序,而不是确定它是否已分类。
您始终可以将其包装在为您维护sorted
标记的对象中。
您可以使用以下方式自行实现此功能:
/**
* Bridge function to the isSorted(Iterable<Comparable>) below
* allowing arrays to tested too.
*
* @param <T> - The elements in the array.
* @param a - The array.
* @return - true if the Array is sorted - false otherwise.
*/
public static <T extends Comparable<T>> boolean isSorted(T[] a) {
return isSorted(Arrays.asList(a));
}
/**
* Checks sortedness of any Iterable of Comparables.
*
* @param <I> - The type of the Iterable.
* @param <T> - The type of the Comparable.
* @param a - The Iterable<Comparable> to test.
* @return - true if the Iterable is sorted - false otherwise.
*/
public static <T extends Comparable<T>> boolean isSorted(Iterable<T> a) {
// Remember the previous element.
T prev = null;
for (T it : a) {
if (prev != null && it.compareTo(prev) < 0) {
// This should be before prev! Not sorted!!
return false;
}
prev = it;
}
// All in order.
return true;
}
答案 1 :(得分:0)
似乎没有标准功能。使用此:
private static <T extends Double/*Can't extend Number for some reason ;-)*/>
boolean isSorted(T[] x)
{
if (x != null){
for (int n = 1; n < x.length; ++n){
if (x[n - 1] >= x[n]){
return false;
}
}
}
return true;
}