在Java中,您可以使用多种排序算法对匹配的数组进行排序。以下是一些常用的排序算法:
针对Java中的数组长度不确定以及重复元素的情况,可以考虑使用以下方法进行处理:
在Java 8及以后的版本中可以借助Stream API直接对数组进行排序。
对于重复元素的问题,您可以选择不使用Set,而是进行遍历并比较每个元素,将其添加到合适的位置。
对于排序过程中可能出现的问题,例如数组为空,或者数组已经排序,也可以使用异常处理来处理。
例如,可以使用以下方式实现归并排序:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = {5, 2, 8, 2, 4, 1, 6, 1, 4};
int[] sortedArray = mergeSort(arr);
System.out.println(Arrays.toString(sortedArray));
}
public static int[] mergeSort(int[] arr) {
if (arr == null || arr.length == 0) {
throw new IllegalArgumentException("Array should not be null or empty.");
}
int[] sortedArray = arr.clone();
mergeSortNonRecursive(sortedArray, 0, arr.length - 1);
return sortedArray;
}
private static void mergeSortNonRecursive(int[] arr, int left, int right) {
if (left >= right) {
return;
}
int mid = left + (right - left) / 2;
mergeSortNonRecursive(arr, left, mid);
mergeSortNonRecursive(arr, mid + 1, right);
merge(arr, left, mid, right);
}
private static void merge(int[] arr, int left, int mid, int right) {
int[] tempArray = new int[right - left + 1];
int i = left;
int j = mid + 1;
for (int k = left; k <= mid; ++k) {
if (i > mid) {
tempArray[k - left] = arr[j++];
} else if (j > right) {
tempArray[k - left] = arr[i++];
} else if (arr[i] < arr[j]) {
tempArray[k - left] = arr[j++];
} else {
tempArray[k - left] = arr[i++];
}
}
int j = left;
for (int k = right - 1; j >= mid + 1; --j) {
if (i< right) {
tempArray[k - left] = arr[j];
i++;
} else {
tempArray[k - left] = arr[mid + 1];
mid++;
for (int l = mid + 2; l <= right; ++l) {
tempArray[k - left] = arr[l];
mid++;
}
break;
}
}
for (int k = left; k <= right; ++k) {
arr[k] = tempArray[k - left];
}
}
}
上述代码中使用了Arrays.copyOfRange()
方法进行克隆,然后使用Java8的StreamforEach()
方法进行操作,并使用了双层for循环和双重递归调用进行mergeSort
方法的实现。
领取专属 10元无门槛券
手把手带您无忧上云