有人能帮我检查我的代码是否正确,或者帮我知道是否有其他方法可以解决这个问题我正在尝试检查数组是否按升序或降序排列,然后返回1如果不是,那么返回0;首先,我创建了一些按递增顺序排序数组的方法,以及另一种按递减顺序排序数组的方法,然后使用这些方法与原始数组进行比较。我使用了下面的代码:
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;
}
}
2条答案
按热度按时间1qczuiv01#
为了进行准确的验证,应考虑到有重要的副作用。
检查是否有任何列表以一些相等的值开始。
确定值首先不同的起始索引。
如果所有值都相等,则返回
true
马上。请注意,在最坏的情况下,当所有值都相等时,需要检查整个数组(此后的最后一个值可以是升序或降序)。
印刷品
检查方法。
njthzxwz2#
既然你要求另一种方法来做这件事,这里是一个不同的方法。
你能做的是:
根据前两个元素(如果存在的话)确定数组是按升序还是降序排序
在确定假定的排序时考虑相等的值(感谢您指出@wjs)
然后,根据确定的顺序检查数组的其余部分是否正确
更新的示例:
输出:
代码旁注:
不是返回int(0,1),而是
isSorted()
方法肯定会返回boolean
.这是没有意义的
holdingArray
.