不使用Collection方法对列表进行排序

时间:2010-05-16 15:02:47

标签: java

如何在不使用Collection方法的情况下对列表进行排序?

2 个答案:

答案 0 :(得分:7)

路线图

您的第一个排序算法

我认为计算排序是最好的算法。阅读并尝试理解它,然后按如下方式编写自己的实现:

  1. 在0..9之间生成1000个随机数(使用java.util.Random填充int[]
  2. 使用计数排序对它们进行排序。
  3. 一旦你这样做了,你就会意识到当你可以利用数字的某些属性时,排序是多么简单(在这种情况下,它们介于0..9之间)。

    您的第二个排序算法

    选择排序是一种很好的直观排序算法,适合您的下一个实现。这是一种比较排序,并不假设任何有关数字范围的内容。现实生活中的许多人使用这种算法排序:

    • 有一些选择可供选择,我们会寻找最佳选择并先选择它。
    • 现在最好的就是出局,所以我们从其他方面寻找第二好的。
    • 然后我们寻找第三好......等等。

    旅途的其余部分

    您可能希望实现其他二次算法只是为了更好地掌握基础知识,但下一步是学习递归,特别是划分和征服算法。

    如果没有先了解基本的递归,你就不想直接进入合并排序/快速排序,因为它太过分了。

    执行通常的递归练习,阶乘,斐波纳契等。如果需要指导,请从stackoverflow请求指针。甚至可能已经有关于学习递归的好答案的问题。

    一次旅行

    您可能希望实现合并排序的合并部分,甚至在您完全理解递归之前。这是一项非常有教育意义的练习:

    • 给定数字A的排序数组和数字B的排序数组,将两者合并为一个排序数组
      • 利用A和B已经排序的事实

答案 1 :(得分:2)

由于这很可能是家庭作业,我会给你建议而不是源代码。

sorting algorithms上查看此页面。您应该根据您的要求选择正确的排序算法。选择错误的算法可能意味着性能不佳或不必要的复杂性。

假设您只有少量项目并想要一个简单的算法,那么您可以查看insertion sort。维基百科页面包含伪代码。该算法具有O(n ^ 2)性能。

如果您的列表很长,并且您希望以稍微复杂的算法为代价获得更好的性能,则可以尝试merge sort。该算法在平均和最差情况下都具有O(n log(n))性能,是语言库中的流行选择。