考虑到从函数返回的数组非常大。
fastest测试数组是否排序的方法是什么?
fastest
最简单的方法是:
/// <summary> /// Determines if int array is sorted from 0 -> Max /// </summary> public static bool IsSorted(int[] arr) { for (int i = 1; i < arr.Length; i++) { if (arr[i - 1] > arr[i]) { return false; } } return true; }
您将必须访问数组的每个元素,以查看是否未排序。
您的O(n)方法几乎可以达到最快的速度,而无需任何有关数组可能状态的特殊知识。
您的代码专门测试数组是否 以较小的值在较低的索引处 排序。如果那不是您想要的,您的 if 会变得稍微复杂一些。您的代码注释确实暗示了您所追求的。
如果您对可能的状态有特殊的了解(例如,您知道它通常已排序,但是可能会将新数据添加到末尾),则可以优化访问数组元素的顺序,以使测试在失败时能够更快地失败。数组未排序。
您可以利用对硬件体系结构的了解,通过对阵列进行分区,首先比较分区的边界(快速失败检查),然后在单独的线程上每个内核运行一个阵列分区(不超过3个)来并行检查阵列的多个部分。每个CPU内核1个线程)。但是请注意,如果数组分区比缓存行的大小小得多,线程将趋于相互竞争以访问包含数组的内存。多线程只会对相当大的数组非常有效。