[英]How to convert selection sort to the Comparator interface?
这是选择排序功能的代码:
public class Selection
{
public static void sort (Comparable [] a)
{ //Sort [] into increasing order.
int N = a.length;
for (int i = 0; i < N; i++)
{ //Exchange a[i] with the smallest entry in a[i+1...N).
int min = i;
for (int j = i+1; j < N; j++)
if (less (a[j], a[min]) ) min = j;
exch(a, i, min); // assume exch has been implemented already
}
}
}
有人告诉我要在排序实现中支持比较器,我要做的就是使用“对象”而不是“可比较”,并将“比较器”传递给“ sort()”和“ less()”并在“减)”。 这是在比较器接口中进行制作的正确方法吗? :
public class Selection
{
public static void sort (Object [] a, Comparator c)
{ //Sort [] into increasing order.
int N = a.length;
for (int i = 0; i < N; i++)
{ //Exchange a[i] with the smallest entry in a[i+1...N).
int min = i;
for (int j = i+1; j < N; j++)
if (less (c, a[j], a[min]) ) min = j;
exch(a, i, min);
}
}
}
private static booloean less (Comparator c, Object v, Object w)
{
return c.compare(v, w) < 0;
}
private static void exch (Object [] a, int i, int j)
{
Object swap = a[i]; a[i] = a[j]; a[j] = swap;
}
实际上,您所做的确实是对算法进行概括的一种方法,这样它不仅可以使用Comparator
在Comparable
对象上运行,而且可以在任意对象上运行。 该代码存在一些问题(例如,使用原始类型的事实),但是您的更改可以描述为“实现所需目标所必需的最小修改”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.