判断一维数组是否已经排序好,升序或者降序。

SilentHunter460 2019-11-10 11:54:15
public static boolean issorted(int[] array)

只允许传入一个数组参数,然后判断数组是否已经升序或者已经降序。
要分开判断是否升序或者是否降序不难,能不能同时判断两种情况,还只能允许一个参数。
...全文
1169 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-11-11
  • 打赏
  • 举报
回复
for example
boolean asc = true, des = true; //分别计算升序降序
for (int i=1; i<array.length; i++) {
asc &&= (array[i] >= array[i-1]); //升序
des &&= (array[i] <= array[i-1]); //降序
}
return asc || des; //升序或者降序
三仙半 2019-11-11
  • 打赏
  • 举报
回复 1
简单写了一下,我的想法基于选择排序的第一趟,测试升序时的交换次数,如果已经升序有序,那么,以arr[0]为最大值时,会发生n-1次交换,如果不符合第一条,再测试降序,同理,以arr[0]为最小值,如果已经降序有序,会发生n-1次交换,否则,arr就是无序的。
测试不是很充分,效率似乎也有课改进之处,抛砖引玉,大家探讨一下吧。

public static void main(String[] args) {
int[] s = new int[] { 1, 2, 3, 4 };
int[] j = new int[] { 4, 3, 2, 1 };
int[] f = new int[] { 1, 4, 3, 2 };
int[] ss = new int[] { 1, 1, 2, 3, 4 };
int[] jj = new int[] { 4, 3, 3, 2, 1 };

System.out.println(isSortted(s));
System.out.println(isSortted(j));
System.out.println(isSortted(f));
System.out.println(isSortted(ss));
System.out.println(isSortted(jj));
}

public static int isSortted(int[] arr) {
int swapMax = 0;
int max = arr[0];

for (int i = 1; i < arr.length; i++) {
if (max <= arr[i]) {
max = arr[i];
swapMax++;
}
}
if (swapMax == arr.length - 1) {
// 升序
return 1;
} else {
int swapMin = 0;
int min = arr[0];
for (int j = 1; j < arr.length; j++) {
if (min >= arr[j]) {
min = arr[j];
swapMin++;
}
}
if (swapMin == arr.length - 1) {
// 降序
return -1;
} else {
return 0;
}
}
}

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧