-4

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

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

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

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

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

4

3 回答 3

4

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

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

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

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

于 2011-08-28T08:22:23.090 回答
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));
        }

    }

}

仅供参考,只有我的计算机每次运行执行的代码在排序例程中花费的时间低于 1 毫秒,我必须将数据大小增加 100 倍才能获得一些有意义的数据。

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

这些数字在硬件功能、输入数据类型、计算机负载等方面会有所不同,但您至少可以对预期有所了解。

于 2011-08-28T09:06:54.457 回答
1

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

于 2011-08-28T08:22:46.330 回答