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

发布于 2024-12-01 19:01:34 字数 1432 浏览 1 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

相对绾红妆 2024-12-08 19:01:34

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

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

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

实际环境(C++、.NET、Java)的影响可以忽略不计,除非您在内存量极小的情况下执行此操作。使用任何你有经验的东西。

Unless this is a homework problem, don't implement your own sorting algorithm.

Use the one already provided by your development environment - it'll be robust, debugged, and almost certainly faster than anything you'll write yourself.

FWIW, the Sort() method on List<T> in .NET uses a QuickSort.

The actual environment (C++ vs .NET vs Java) will have negligable impact, unless you're doing this in an absurdly small amount of memory. Use whatever you have experience with.

蓝眼睛不忧郁 2024-12-08 19:01:34

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折叠以获得一些有意义的数据。

  • 这段代码对诸如比较器代码所需的时间(元素是原始双精度数,比较其他对象可能会花费更多时间)之类的事情进行了完全抽象,
  • 一旦即时编译器弄清楚了代码,它应该变成速度也快一点,
  • 您可以轻松地添加使用替代排序算法的测试运行,并查看它们的行为如何。

这些数字会因硬件功能、输入数据类型、计算机负载等而有所不同,但您至少可以了解一下期待。

This chunk of code in Java shows how you could determine at least some of the figures you're after :

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, only my computer each run that code executed stayed below 1 millisecond spent in the sorting routine, I had to increase the data size 100 fold to get some meaningful data.

  • This piece of code makes entire abstraction of things like the time the comparator code needs (the elements are primitive doubles, comparing other objects will probably take a whole lot more time)
  • once the just in time compiler has figured out the code, it should become a bit faster as well
  • you could easily add test runs with alternative sorting algorithms and see how those behave

These figures will vary in function of hardware, input data type, load on your computer, etc, but you can at least get a feeling for what to expect.

初雪 2024-12-08 19:01:34

您不需要实现任何算法(除非这是家庭作业)。每种语言都有其排序功能,而且它们非常有效。例如,在 C++ 中,您可以使用 std::sort 在许多实现中使用快速排序(如果元素数量很少,则使用插入排序)。

You don't need to implement any algorithm (unless this is homework). Every language has its sorting functions, and they are pretty efficient. For example, in C++ you'd use std::sort which on many implementation uses quick sort (and insertion sort if the number of elements is small).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文