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

时间:2012-02-10 06:40:25

标签: java

您是否有代码可以为您排序,并在完成排序后查看是否有任何更改。你会使用某种类型的排序,如插入排序,选择或沿着这些行

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;   

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

我需要添加什么?

4 个答案:

答案 0 :(得分:8)

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

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);

答案 1 :(得分:1)

  

您是否有代码可以为您排序并在完成后对其进行排序   排序看看是否有任何变化

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

要清楚。

@Petar的答案将是最佳选择,因为它是最简单直接的。

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

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

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

答案 2 :(得分:1)

//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 boolean。

答案 3 :(得分:-1)

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