The method sort(Comparable[]) in the type Shell is not applicable for the arguments (int[])

Posted hesfail

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了The method sort(Comparable[]) in the type Shell is not applicable for the arguments (int[])相关的知识,希望对你有一定的参考价值。

看算法第四版的希尔排序时,打算把例中的String数组换成int数组,却出现了上面的问题。最后在StackOverflow找到答案
原代码:

package sort;

import edu.princeton.cs.algs4.In;

public class Shell{
    public static void sort(Comparable[] a)
    {    //将a[]升序排列
        int N = a.length;
        int h = 1;
        while (h<N/3) h = 3*h + 1; // 1,4,13...  
        while (h>=1)
        {    // 数组变为h有序
            for (int i=h;i<N;i++)
            {    // 将a[i]插入到a[i-h],a[i-2h]..中
                for (int j=i;j>=h&&less(a[j],a[j-h]);j -= h)
                {
                    System.out.println(a[j]+" "+a[j-h]+less(a[j],a[j-h]));exch(a,j,j-h);
                    for (int k=0;k<N;k++)
                        System.out.print(a[k]+" ");
                    System.out.println();
                }
            }    
            h = h/3;
        }
    }
    private static boolean less(Comparable v,Comparable w)
    // 比较元素
    {      return v.compareTo(w)<0;    }
    private static void exch(Comparable[] a,int i,int j)
    // 将元素交换位置
    {    Comparable t = a[i]; a[i] = a[j]; a[j] = t;    }
    private static void show(Comparable[] a)
    {    //  单行打印数组,只有本类的静态方法可调用
        for (int i=0;i<a.length;i++)
        System.out.println();
    }
    public static boolean isSorted(Comparable[] a)
    {  // 判断数组元素是否有序
        for (int i=1;i<a.length;i++)
            if (less(a[i],a[i-1]))  return false;
        return true;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 从标准输入读取字符串,将它们排序并输出
        String[] a = In.readStrings();
        sort(a);
        assert isSorted(a); // 确认有序
        show(a);
        
    }
}

 String[] a = In.readStrings()不能改成int[] a = In.readInts(),因为int是原始数据类型,无法实现接口。应该改成Integer[],然而In类没有对应的方法,所以我改成了

        int[] in = In.readInts();
        Integer[] a = new Integer[in.length]; 
        for (int i=0;i<a.length;i++)
            a[i]=in[i];
        sort(a);
        assert isSorted(a); // 确认有序
        show(a);

测试有效

Stackoverflow地址

以上是关于The method sort(Comparable[]) in the type Shell is not applicable for the arguments (int[])的主要内容,如果未能解决你的问题,请参考以下文章

Java-比较器(ComparableComparator)

Sort the Array

Sort the Array

Sort the Array

设计模式 - 模板方法模式(template method pattern) 排序(sort) 具体解释

1356. Sort Integers by The Number of 1 Bits