确定数组列表是否已排序

时间:2013-07-06 06:34:31

标签: java sorting output

我需要估计数组列表是否已排序(不排序)。

对字符串进行排序时,它们按字母顺序排列。 我尝试使用compareTo()方法来确定哪个字符串首先出现

如果数组列表已排序,则返回true,否则返回false。

代码:

public boolean isSorted()
{
    boolean sorted = true;        
    for (int i = 1; i < list.size(); i++) {
        if (list.get(i-1).compareTo(list.get(i)) != 1) sorted = false;
    }

    return sorted;
}

简易测试:

    ArrayList<String> animals = new ArrayList<String>();
    ArrayListMethods zoo = new ArrayListMethods(animals); 
    animals.add("ape");
    animals.add("dog");
    animals.add("zebra");

    //test isSorted
    System.out.println(zoo.isSorted());
    System.out.println("Expected: true");

    animals.add("cat");
    System.out.println(zoo.isSorted());
    System.out.println("Expected: false");

    animals.remove("cat");
    animals.add(0,"cat");
    System.out.println(zoo.isSorted());
    System.out.println("Expected: false");

    **Output:**
    false
    Expected: true
    false
    Expected: false
    false
    Expected: false

此简单测试仅显示1/3覆盖率。

如何解决这个问题。

6 个答案:

答案 0 :(得分:8)

您的方法中有一个小错误。应该是:

public boolean isSorted()
{
    boolean sorted = true;        
    for (int i = 1; i < list.size(); i++) {
        if (list.get(i-1).compareTo(list.get(i)) > 0) sorted = false;
    }

    return sorted;
}

>0代替!=1,您无法确定是否已返回1

答案 1 :(得分:2)

更改条件:

if (list.get(i - 1).compareTo(list.get(i)) >0)

您应该检查>0而不是!=-1

浏览compareTo()

的文档
  

如果参数字符串等于此字符串,则值为0;如果此字符串按字典顺序小于字符串参数,则小于0的值;如果此字符串按字典顺序大于字符串参数,则大于0的值。

答案 2 :(得分:1)

试试这个

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Sort {
public static void main(String []args) {
    List<String> l1=new ArrayList<String>();
    List<String> l2=new ArrayList<String>();
    l1.add("a");
    l1.add("b");
    l1.add("c");

    l2.add("b");
    l2.add("c");
    l2.add("a");

     if(isSorted(l1)){
         System.out.println("already sorted");
     }
    else{
         Collections.sort(l1);
     }
   }
public static boolean isSorted(List<String> list){
    String previous = "";
    for (String current: list) {
        if (current.compareTo(previous) < 0)
            return false;
        previous = current;
    }
    return true;
}
}

答案 3 :(得分:1)

您可以编写像isSortedList(List list)这样的实用工具方法。

public static boolean isSortedList(List<? extends Comparable> list)
{
    if(list == null || list.isEmpty())
        return false;

    if(list.size() == 1)  
        return true;

    for(int i=1; i<list.size();i++)
    {
        if(list.get(i).compareTo(list.get(i-1)) < 0 )
            return false;
    }

    return true;    
}

与实用方法一样,您可以在任何地方使用它。

答案 4 :(得分:0)

你必须将compareTo表达式更改为任何正数,这表示前一个元素按字母顺序排在当前元素之后,因此列表不是有序的

    public boolean isSorted()
    {
        boolean sorted = true;        
        for (int i = 1; i < list.size(); i++) {
            if (list.get(i-1).compareTo(list.get(i)) > 0) sorted = false;
        }

        return sorted;
    }

答案 5 :(得分:0)

您需要检查未分类的案例。

这意味着如果您假设排序升序,那么未排序的案例将会在索引i中找不到索引i-1的元素。 其中element[i] < element[i-1]