采用有限状态机检测方向转折点,将数组切分为连续单调子段,每段独立进行升序排序。通过维护升降状态,在方向反转时确定子段边界并排序,避免了传统方法因边界误判导致的段合并与排序错误,实现精准的单调子序列识别与排序。
import ja va.util.*;
public class MonotonicSegmentSort {
public static void sortMonotonicSegments(int[] arr) {
if (arr == null || arr.length <= 1) return;
int ldx = 0; // 当前段起始索引
boolean wasUp = false, wasDown = false;
for (int i = 0; i < arr.length - 1; i++) {
boolean up = arr[i] < arr[i + 1];
boolean down = arr[i] > arr[i + 1];
// 方向反转:上一段结束,触发排序
if ((wasUp && down) || (wasDown && up)) {
Arrays.sort(arr, ldx, i + 1); // 升序排序 [ldx, i]
ldx = i + 1;
wasUp = wasDown = false;
} else {
wasUp = up;
wasDown = down;
}
}
// 排序最后一段
Arrays.sort(arr, ldx, arr.length);
}
public static void main(String[] args) {
int[] data = {53, 50, 41, 8, 64, 35, 17, 76, 58, 3, 75, 1, 99, 56, 2};
sortMonotonicSegments(data);
System.out.println(Arrays.toString(data));
// 输出: [8, 41, 50, 53, 17, 35, 64, 3, 58, 76, 1, 75, 2, 56, 99]
}
}
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述