1. 改写插入排序,使用泛型进行实现,并带比较元的参数,按如下要求分别进行调用和测试: 对一组整数,按数码和由大到小排序,一个整数的数码和指各位数字之和
时间: 2024-03-16 10:45:15 浏览: 37
好的,以下是改写后的泛型插入排序代码,增加了比较器参数:
```java
public class InsertionSort {
public static <T> void sort(T[] arr, Comparator<? super T> comparator) {
for (int i = 1; i < arr.length; i++) {
T current = arr[i];
int j = i - 1;
while (j >= 0 && comparator.compare(arr[j], current) < 0) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = current;
}
}
}
```
其中,`T[] arr` 表示待排序的数组,`Comparator<? super T> comparator` 表示比较器,用于比较两个元素的大小关系。下面是对一组整数按数码和由大到小排序的调用和测试代码:
```java
public class Main {
public static void main(String[] args) {
Integer[] arr = {123, 456, 789, 99, 555};
Comparator<Integer> digitSumComparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
int digitSum1 = 0, digitSum2 = 0;
int num1 = o1, num2 = o2;
while (num1 > 0) {
digitSum1 += num1 % 10;
num1 /= 10;
}
while (num2 > 0) {
digitSum2 += num2 % 10;
num2 /= 10;
}
return digitSum2 - digitSum1;
}
};
InsertionSort.sort(arr, digitSumComparator);
for (Integer num : arr) {
System.out.print(num + " ");
}
}
}
```
输出结果为 `555 99 789 456 123`,符合要求。