码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2020-02-24 16:58:16      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:col   输出   打印   reads   ref   target   auto   not   读取字符串   

看算法第四版的希尔排序时,打算把例中的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[])

标签:col   输出   打印   reads   ref   target   auto   not   读取字符串   

原文地址:https://www.cnblogs.com/hesfail/p/12357457.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!