如何检查排序和旋转数组是按升序还是降序排列?

时间:2019-11-19 15:04:51

标签: python arrays algorithm sorting

我需要检查排序和旋转后的数组是按升序还是降序排列。我需要知道它,以便通过修改后的二进制搜索找到轮换计数。

例如:

[5, 6, 1, 2, 3, 4]

按升序排列,但

[2, 1, 6, 5, 4, 3]

按降序排列

Python实现会很棒。感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

简单的恒定时间方法是检查任意3对相邻的对。最多包含一个边界,因此大多数与数组具有相同的顺序。

这些可以重叠。例如,如果a,b,c,d在阵列中相邻,则对ab,bc,cd很好。

环绕是可以的。例如,对于数组abc,请检查ab,bc,ca

答案 1 :(得分:0)

使用Java提供代码可能是您可以查看是否有帮助

public class IsSorted {

public static void main(String[] args){
    int[] list ={4,3,2,1};
    System.out.println(isSorted(list));

}

public static int isSorted(int[] a){

    if(a.length==0){
        return 1;
    }
    if(a.length==1){
        return 1;
    }

    int[] holdingArray=new int[a.length];

    for (int i =0; i<a.length; i++){
        holdingArray[i]=a[i];
    }


    int[] virtualIncreasedArray= new int[holdingArray.length];
    int[] virtualDecreasedArray= new int[holdingArray.length];
    sortIncrease(holdingArray);

    for(int i=0; i<holdingArray.length;i++){
        virtualIncreasedArray[i]=holdingArray[i];
    }
    sortDecrease(holdingArray);

    for(int i=0; i<holdingArray.length;i++){
        virtualDecreasedArray[i]=holdingArray[i];
    }

    //check if array is decreasing
    for(int i=0; i<virtualDecreasedArray.length;i++){
        if(virtualDecreasedArray[i]!=a[i]&&virtualIncreasedArray[i]!=a[i]){
            return 0;
        }

    }
    //check if array is increasing


    return 1;
}


static void sortIncrease(int[] a){
    for(int unsorted=a.length-1; unsorted>0; unsorted--){
        for(int i=0; i<unsorted;i++){
            if(a[i]>a[i+1]){
                swap(a,i,i+1);
            }
        }
    }
}


static void sortDecrease(int[] a){
    for(int unsorted=a.length-1; unsorted>0; unsorted--){
        for(int i=0; i<unsorted; i++){
            if(a[i]<a[i+1]){
                swap(a,i,i+1);
            }
        }
    }
}

static void swap(int[] a, int i, int j){
    if(i==j){
        return;
    }
    int temp = a[i];
    a[i]=a[j];
    a[j]=temp;
}

}