假定我们有这样一个需求:写一个排序方法,能够对整形数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?
/**
* GenericComparator.java
*
* Copyright@2016 Brad. All rights reserved.
*
* 2016年12月12日
*/
package Generic;
/**
* GenericComparator
*
* @Author brad.zhou
* @Version 1.0
*/
public class GenericComparator
{
public static void main(String[] args)
{
Integer[] intArr = { 3, 4, 2, 7, 1, 5 };
Float[] floatArr = { 5.23F, 5.6F, 2.3F, 7.33F, 9.54F };
String[] strArr = { "fas", "dfq", "hrer", "jfo", "jrwddq", "zfwf" };
compare(intArr);
genericPrint(intArr);
compare(floatArr);
genericPrint(floatArr);
compare(strArr);
genericPrint(strArr);
}
private static <T> void genericPrint(T[] arr)
{
for (T t : arr)
{
System.out.print(t + " ");
}
System.out.println();
}
private static <T extends Comparable<T>> void compare(T[] arr)
{
quickSort(arr, 0, arr.length - 1);
}
private static <T extends Comparable<T>> void quickSort(T[] arr, int p,
int r)
{
if (p < r)
{
int q = partition(arr, p, r);
quickSort(arr, p, q - 1);
quickSort(arr, q + 1, r);
}
}
private static <T extends Comparable<T>> int partition(T[] arr, int p, int r)
{
T x = arr[r];
int i = p - 1;
for (int j = p; j <= r - 1; j++)
{
if (arr[j].compareTo(x) <= 0)
{
i++;
exchange(arr, i, j);
}
}
exchange(arr, i + 1, r);
return i + 1;
}
private static <T> void exchange(T[] arr, int i, int j)
{
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
泛型实现排序算法的重用
最新推荐文章于 2020-08-14 21:05:40 发布