如何检查整数数组是否已排序?

你有代码只是为你排序,并在完成排序后看看是否有任何变化。 你会使用某种类型的排序,如插入排序,选择或沿着这些行的东西

int[] arr = {4,1,3,8,9,2,7,0,5,6}; System.out.println(Arrays.toString(arr)); selectionSort(arr); public static void selectionSort (int []arr) { for(int i = 0; i < arr.length; i ++) { //find the ith element int smallest = i; for (int j = i + 1; j <arr.length; j++) { //find the smallest unsorted element if(arr[j] < arr[smallest]) { smallest = j; 

所以我认为我在正确的轨道上,但我不知道如何比较整数,看看是否有正确的顺序。

我需要添加什么?

它比这简单得多 – 只是遍历数组并查看每个元素是否小于下一个元素。

 int[] checkarray = ....; boolean sorted = true; for(int i = 1; i < checkarray.length; i++) { if(checkarray[i-1] > checkarray[i]){ sorted = false; break; } } System.out.println("Sorted: " + sorted); 

你有代码只是为你排序,并在完成排序后看看是否有任何变化

如果您在一个方法中将您希望排序的数组作为输入,但不确定它是否存在,则可以应用插入排序,因为这(对于大输入而言效率低的算法)对于几乎排序的输入具有线性复杂性。

只是要清楚。

@Petar的答案是要走的路,因为它是最简单直接的。

我提到这个答案也是为了完整性,因为如果你不确定它是否在你的程序中的特定时间排序,那么排序是不荒谬的。

毕竟,如果它没有完全排序,你已经完成了O(N)扫描,没有任何好处,你将在顶部O(NlogN)上有额外的排序复杂性。

这实际上是大多数排序算法的算法分析提到它们在排序输入上的表现的原因,因为它比我们预期的更频繁。
你的案例就是一个例子。

 //def ArrayList listOfItemsForSorting = ["a", "B", "c"]; //def String sortOrder = "ASC" or "DESC" def boolean sortItemsWithCollator(ArrayList listOfItemsForSorting, String sortOrder) { Collator myCollator = Collator.getInstance(); // check if the array itself is less than 2 items if so, it's clearly no need for sorting. if (listOfItemsForSorting.size() < 2) { return true; } else if (sortOrder.equals("ASC")){ for (def i = 0; i < listOfItemsForSorting.size() - 1; i++) { if (myCollator.compare(listOfItemsForSorting[i], listOfItemsForSorting[i + 1]) > 0) { return false; } } } else{ for (def i = 0; i < listOfItemsForSorting.size() - 1; i++) { if (myCollator.compare(listOfItemsForSorting[i], listOfItemsForSorting[i +1]) < 0) { return false; } } } return true; } 

此方法返回s布尔值。

选择排序是最简单的排序技术,它使用线性搜索来扫描列表或数组,但更好的排序和强烈推荐的方法是快速排序。 快速排序基于Divide and Conquer理论,我们将列表分成各种较小的子列表,然后将它们全部排序。 请阅读维基百科中的快速排序。 同样重要的是要知道各种排序技术如何根据典型数据的出现执行,例如所有相同数据,等等。