2012-05-09 43 views
3

所有我需要的是排序是不使用内置的Java分拣机的ArrayList的最简单的方法。目前,我将ArrayList更改为一个Array,并使用了一个内联排序代码,但后来我需要调用一些元素,ArrayList更容易实现。如何排序的ArrayList

+6

“内置Java分类器”是什么意思?为什么你不想使用它? –

+1

我无法使用它,因为我打算自己编码。我的意思是collections.sort,它是内置的。 XD –

+1

“意味着自己编码”?如果这是家庭作业,请用[家庭作业]标记标记。 –

回答

0
+1

他问没有使用内置的java分拣机。我想这就是他不想要的东西.. –

+0

他特别提到他不能使用内置分拣机。 –

3

假设一个ArrayList<String> a ...

最简单的(但我猜这是你在说什么,你不能使用):

Collections.sort(a); 

下一个最简单的(但浪费):

a = new ArrayList<String>(new TreeSet<String>(a)); 
+0

TreeSet将消除任何重复的字符串。 –

0

检查Comparator在java中。您可以使用此实现自己的排序,并使用Collections.sort(..)使用自己的排序ArrayList的Comparator

+0

“比较器”本身并没有进行任何排序;它只定义了排序。他仍然需要调用一个使用“Comparator”(或“Comparable”接口)的排序函数来确定如何排序。 –

+0

yes agree ..这就是为什么我要求检查Collections类。 – raddykrish

+0

他特别提到他不能使用内置分拣机。 –

0

如果我没有记错,当你拉一个元素出的ArrayList中的它的动作元素的休息下来全自动。如果你做一个循环,查找最低值并将其拉出,然后将它放在arrayList的末尾。在索引的每个通行证上。少用一个。因此,在10个元素列表中,您将看到所有10个元素都取最小的元素并将其追加到最后。然后你会看到前九个,并把它的最低点附加到最后。然后第8个这样,直到列表排序。

+1

请注意,这是最糟糕的情况'O(n!)',这是相当糟糕的时间。有许多[排序算法](http://en.wikipedia.org/wiki/Sorting_algorithms)会表现更好。 –

+0

是的,但他确实要求最简单的方法来做到这一点。我猜想,即使这被标记为Java它也是作业,他只是需要一种方法来得到它的排序。有更好的方法,但如果他在这里问他可能不知道如何使用这些。假设,这就是我读/解释问题的方式。 –

5

你可以使用匿名排序。

Collections.sort(<ArrayList name>, Comparator<T>() { 

    public int compare(T o1, T o2) { 
    ..... 
    .... 
    }  
}); 

其中T是要排序(即字符串,对象) 和简单地实现Comparator接口,以自己的需要

+3

他特别提到他不能使用内置分拣机。 –

3

“内置一种”假设类型是指Collections.sort( )和你的罚款你已经实现了排序算法,你可以转换你的数组排序为ArrayList

ArrayList list = new ArrayList(Arrays.asList(sortedArray)); 

或者,你可以重写你的排序算法用List(如一个ArrayList工作),而不是的通过使用get(int index)set(int index, E element)方法的阵列。

+1

+1是作为响应OP的约束的第一个答案。如果需要,OP可以首先将一个ArrayList转换为一个数组(使用ArrayList的toArray(T [] a)'方法),然后创建一个新的ArrayList,或者清除并重新填充原始数组(使用'addAll Arrays.asList(sortedArray)')。 –

0

如果你是为了你自己的数组进行排序,那么最简单的算法之一是冒泡排序。这可以通过对数组进行多次遍历,比较相邻的元素对,如果左侧的元素大于右侧的元素,则交换它们。

由于这是家庭作业,我要把它留给你找出休息。从可视化你的算法开始,然后考虑你的算法需要做多少次通过,以及每次通过需要开始的位置。然后编码。

您还需要了解和解决的问题,你如何比较一对数组的元素:

  • 如果这些元素是基本类型的实例,您只需使用一个关系运算符。
  • 如果元素是引用类型的情况下,你需要使用两ComparableComparator接口。在javadocs中查找它们。(看他们是你的作业的一部分...)
2

排序通过命令提示符传递的参数;不使用Arrays.sort

public class Sort { 

    public static void main(String args[]) 
    { 
     for(int j = 0; j < args.length; j++) 
     { 
      for(int i = j + 1; i < args.length; i++) 
      { 
       if(args[i].compareTo(args[j]) < 0) 
       { 
        String t = args[j]; 
        args[j] = args[i]; 
        args[i] = t; 
       } 
      } 
      System.out.println(args[j]); 
     } 
    } 
} 

使用的Array.sort

import java.util.*; 
public class IntegerArray { 

    public static void main(String args[]) 
    { 
     int[] num=new int[]{10, 15, 20, 25, 12, 14}; 
    Arrays.sort(num); 
     System.out.println("Ascending order: "); 
     for (int i=0; i<num.length; i++) 
      System.out.print(num[i] + " "); 
     } 
} 
0

这里是一个 “简单” 的快速排序实现:

public Comparable<Object>[] quickSort(Comparable<Object>[] array) { 
    if (array.length <= 1) { 
     return array; 
    } 

    List<Comparable<Object>> less = new ArrayList<Comparable<Object>>(); 
    List<Comparable<Object>> greater = new ArrayList<Comparable<Object>>(); 
    Comparable<Object> pivot = array[array.length/2]; 

    for (int i = 0;i < array.length;i++) { 
     if (array[i].equals(pivot)) { 
      continue; 
     } 
     if (array[i].compareTo(pivot) <= 0) { 
      less.add(array[i]); 
     } else { 
      greater.add(array[i]); 
     } 
    } 

    List<Comparable<Object>> result = new ArrayList<Comparable<Object>>(array.length); 
    result.addAll(Arrays.asList(quickSort(less.toArray(new Comparable<Object>[less.size()])))); 
    result.add(pivot); 
    result.addAll(Arrays.asList(quickSort(greater.toArray(new Comparable<Object>[greater.size()])))); 
    return result.toArray(new Comparable<Object>[result.size()]); 
} 

与阵列和单建的最后一个操作结果可以使用System.arraycopy来增强。