按日期排序大量记录

时间:2011-08-28 08:18:00

标签: performance algorithm sorting programming-languages date-sorting

我得到10700记录我需要尽快对它们进行排序 我一直在阅读关于排序算法的类型,但是迷路了我不知道什么是最好的选择:http://en.wikipedia.org/wiki/Sorting_algorithm

编辑1: 我需要写下一个计算执行算法时间的代码

编辑1-2:是否有任何语言具有排序和计算排序时间的功能?

还有一个问题是用于实现算法的语言会影响速度吗? (例如,如果我使用c ++,它会比java或.Net lang更快。??)

请注意,这不是家庭作业。

3 个答案:

答案 0 :(得分:4)

除非这是一个家庭作业问题,否则不要实施自己的排序算法。

使用您的开发环境已经提供的那个 - 它将比您自己编写的任何内容更强大,调试,并且几乎肯定更快。

FWIW,.NET中Sort()上的List<T>方法使用QuickSort。

实际环境(C ++ vs .NET vs Java)将产生可忽略不计的影响,除非您在极少量的内存中执行此操作。使用您的经验。

答案 1 :(得分:2)

Java中的这一段代码显示了如何确定至少一些你想要的数字:

public class Main {

    private static long test (double[] tosort) {
        Date begin = new Date();
        Arrays.sort(tosort);
        Date end = new Date();
        return end.getTime() - begin.getTime();
    }

    public static void main(String[] args) {
        double[] tosort = new double[10700];

        for (int jj=0;jj<10;jj++) {
            for (int ii=0;ii<tosort.length;ii++) {
                tosort[ii] = Math.random();
            }
            System.out.println("Random data " + test(tosort));
        }

        for (int jj=0;jj<10;jj++) {
            for (int ii=0;ii<tosort.length;ii++) {
                tosort[ii] = ii;
            }
            System.out.println("Presorted data " + test(tosort));
        }

        for (int jj=0;jj<10;jj++) {
            for (int ii=0;ii<tosort.length;ii++) {
                tosort[ii] = tosort.length - ii;
            }
            System.out.println("Inverted data " + test(tosort));
        }

    }

}

Fyi,只有我的计算机每次运行时执行的代码在排序例程中花费的时间都不到1毫秒,我不得不将数据大小增加100倍以获得一些有意义的数据。

  • 这段代码完全抽象出比较代码需要的时间(元素是原始的双倍,比较其他对象可能会花费更多的时间)
  • 一旦即时编译器找到了代码,它也应该变得更快
  • 您可以轻松地使用其他排序算法添加测试运行,并查看这些行为

这些数字会因硬件,输入数据类型,计算机负载等因素而异,但您至少可以感受到预期的结果。

答案 2 :(得分:1)

您不需要 实施 任何算法(除非这是作业)。每种语言都有自己的排序功能,效率很高。例如,在C ++中,您使用std::sort,在许多实现中使用快速排序(如果元素数量很少,则插入排序)。