package sort;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Comparator;
/**
* @author: xyz
* @create: 2022/8/14
* @Description:
* @FileName: Exercise23_01
* @History:
* @自定义内容:
*/
public class Exercise23_01 {
public static void main(String[] args) {
Integer[] list1 = new Integer[10];
for (int i = 0; i < list1.length; i++)
list1[i] = new SecureRandom().nextInt(20);
System.out.println(Arrays.toString(list1));
bubbleSort(list1, new SortComparator<>());
System.out.println(Arrays.toString(list1));
String[] list2 = {"China", "Babylon", "Paris", "america", "India", "Japan"};
System.out.println(Arrays.toString(list2));
bubbleSort(list2);
System.out.println(Arrays.toString(list2));
Double[] list3 = new Double[10];
for (int i = 0; i < list3.length; i++)
list3[i] = Math.random() * 20;
System.out.println(Arrays.toString(list3));
bubbleSort(list3, new SortComparator<>());
System.out.println(Arrays.toString(list3));
}
/** 使用Comparable接口的泛型冒泡排序 */
public static <E extends Comparable<E>> void bubbleSort(E[] list) {
for (int i = 1; i < list.length; i++) {
for (int j = 0; j < list.length - i; j++)
if (list[j].compareTo(list[j + 1]) > 0) {
E temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
}
}
}
/** 使用Comparator接口的泛型冒泡排序 */
public static <E> void bubbleSort(E[] list, Comparator<? super E> comparator) {
for (int i = 1; i < list.length; i++) {
for (int j = 0; j < list.length - i; j++)
if (comparator.compare(list[j], list[j + 1]) > 0) {
E temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
}
}
}
/** 静态内部类-泛型比较器类 */
static class SortComparator<E> implements Comparator<E> {
@Override
public int compare(E o1, E o2) {
if (o1 instanceof Comparable) {
if (((Comparable) o1).compareTo(o2) > 0) return 1;
else if (((Comparable) o1).compareTo(o2) < 0) return -1;
else return 0;
}
//按哈希码排序
if (o1.hashCode() > o2.hashCode())
return 1;
else if (o1.hashCode() < o2.hashCode())
return -1;
else
return 0;
}
}
}