Performance 按日期对大量记录进行排序

Performance 按日期对大量记录进行排序,performance,algorithm,sorting,programming-languages,date-sorting,Performance,Algorithm,Sorting,Programming Languages,Date Sorting,我有10700条记录我需要尽快分类 我一直在阅读排序算法的类型,但迷路了,我不知道什么是最好的选择: 编辑1: 我需要写一段代码来计算执行算法的时间 编辑1-2:是否有任何语言具有排序和计算排序时间的功能 还有一个问题是,用于实现算法的语言会影响速度吗? 如果我使用C++,它会比java或.net?p> 请注意,这不是家庭作业。除非这是家庭作业问题,否则不要实现自己的排序算法 使用您的开发环境已经提供的一个——它将是健壮的、经过调试的,并且几乎肯定比您自己编写的任何东西都要快 NET中列表上的排

我有10700条记录我需要尽快分类 我一直在阅读排序算法的类型,但迷路了,我不知道什么是最好的选择:

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

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

还有一个问题是,用于实现算法的语言会影响速度吗? 如果我使用C++,它会比java或.net?p>
请注意,这不是家庭作业。

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

使用您的开发环境已经提供的一个——它将是健壮的、经过调试的,并且几乎肯定比您自己编写的任何东西都要快

NET中列表上的排序方法使用快速排序


<>实际环境C++ +vs. net vs java将有不可忽视的影响,除非你在一个荒谬的少量内存中做这个。使用你有经验的任何东西。

除非这是家庭作业,否则你不需要实现任何算法。每种语言都有它的排序功能,它们非常有效。例如,在C++中,在许多实现中使用元素数量小的快速排序和插入排序。

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));
        }

    }

}
仅供参考,只有我的计算机每次运行的代码在排序例程中停留在1毫秒以下,我必须将数据大小增加100倍才能获得一些有意义的数据

这段代码使整个抽象的东西,如比较器代码所需的时间,元素是原语的两倍,比较其他对象可能需要更多的时间 一旦即时编译器计算出了代码,它也应该会变得更快一些 您可以轻松地添加带有可选排序算法的测试运行,并查看它们的行为
这些数字在硬件功能、输入数据类型、计算机负载等方面会有所不同,但您至少可以对预期结果有所了解。

我没有否决投票,但您询问需要多少秒,这在很大程度上取决于硬件,而不提供任何相关信息。而且,如果你做了,没有人会为你做这个基准,你应该自己做基准。你的问题不是真的可以回答的。最佳的选择取决于很多因素,包括你最熟悉的环境/语言,以及你只想优化时间、记忆、平衡两者的因素?担心数据倾斜会影响时间安排?它是否会更快取决于它的编码方式。顺便说一句,10k记录非常小,可能太小,无法在现代平台上的合理算法之间产生明显差异。@Mat amen to the-算法选择标准有时在过程中出现得太晚,是排序是否稳定,最好从一开始就考虑。好的,与nLogn中的快速排序正常情况相比,在速度复杂度方面的最佳选择是什么?如何独立于硬件计算算法的执行时间?好的,我需要如何计算执行时间?@xsari如您阅读的wikipedia页面上所述,许多排序算法的执行时间是可变的,取决于输入数据集的顺序。使用预期的数据量和各种随机情况以及预排序、反转等特殊情况进行测试运行,可以让您很好地了解所选排序算法对输入进行排序所需的时间。若要测量经过的执行时间,请使用.NET中的StopWatch类。提前计算执行时间几乎是不可能的-即使您可以预测所需的CPU周期数,您也需要考虑机器上运行的所有其他程序,并提前预测其中哪些程序会对CPU周期产生需求。在大多数现代实现中,我希望std::sort作为Introsort实现;这通常类似于快速排序,但如果递归太深,它将切换到堆。