java - 已排序?检查数组是否在Java中按升序或降序排序
问题描述
有人可以帮我检查我的代码是否正确或帮助我知道是否有其他方法可以解决这个问题我试图检查一个数组是升序还是降序,如果不是,则返回 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;
}
}
解决方案
为了进行准确的验证,应执行以下操作,因为需要考虑重要的附带情况。
- 检查是否有任何列表以一些相等的值开始。
- 确定值首先不同的起始索引。
- 如果所有值都相等,则
true
立即返回。 - 请注意,在所有值都相等的最坏情况下,需要检查整个数组(没有最后一个值,此后它可能是升序或降序)。
int[] sortedAscending = { 1, 1, 3, 4, 7, 10, 11, 15, 15 };
int[] sortedDescending = { 22, 22, 12, 8, 8, 8, 5, 2, 1 };
int[] sortedBoth = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
int[] unsorted = { 2, 1, 2, 19, 19, 2, 4 };
System.out.println(isSorted(sortedAscending));
System.out.println(isSorted(sortedDescending));
System.out.println(isSorted(sortedBoth));
System.out.println(isSorted(unsorted));
印刷
true
true
true
false
检查方法。
public static boolean isSorted(int[] arr) {
int start = 0;
// if the lists start with equal values, need to
// determine a starting point.
while (arr[start] == arr[start+1]
&& start++ < arr.length - 2);
if (start >= arr.length - 2) {
// all but the last the same value, its sorted
return true;
}
boolean asc = arr[start] < arr[start + 1];
for (int i = start; i < arr.length - 1; i++) {
if (asc) {
//check ascending
if (arr[i] > arr[i + 1]) {
return false;
}
// check descending
} else if (arr[i] < arr[i + 1]) {
return false;
}
}
return true;
}
推荐阅读
- javascript - 仅选择javascript中的输入字段
- spring - Spring Cloud Kubernetes FeignClient 错误
- c# - 通过窗口身份验证获取用户名
- php - 如何使用 codeigniter 中的 set_value 函数避免双重转义并防止 xss
- angular - 由无类型角度分量输入引起的 Karma TypeError
- python - 要列出的 Python 类文件
- c++ - 我应该安装什么包才能使用 OpenGL
- kubernetes - Kubernetes 多容器 Pod 中的容器间通信
- automated-tests - 在当前场景中使用来自另一个功能的另一个场景,Behat 测试
- git - git merge-file:如何将冲突合并到
?