繁体   English   中英

如何将选择排序转换为比较器界面?

[英]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; 
}

实际上,您所做的确实是对算法进行概括的一种方法,这样它不仅可以使用ComparatorComparable对象上运行,而且可以在任意对象上运行。 该代码存在一些问题(例如,使用原始类型的事实),但是您的更改可以描述为“实现所需目标所必需的最小修改”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM