我得到了10700条记录,我需要尽可能快地对它们进行排序我一直在阅读排序算法的类型,但迷路了,我不知道最好的选择:http://en.wikipedia.org/wiki/Sorting_algorithm
编辑1:我需要写一段代码来计算执行算法的时间
编辑1-2:有没有一种语言具有排序和计算排序时间的功能?
还有一个问题是用来实现算法的语言会影响速度吗?(例如,如果我使用c++,它会比java或。net lang快吗?? ?)
注意这不是家庭作业
除非这是一个作业问题,否则不要实现自己的排序算法。
使用您的开发环境已经提供的程序-它将是健壮的,可调试的,并且几乎肯定比您自己编写的任何程序都快。
在。net中List<T>
上的Sort()
方法使用了快速排序。
实际环境(c++ vs . net vs . Java)的影响可以忽略不计,除非你在非常少的内存中做这些。
这段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倍才能获得一些有意义的数据。
- 这段代码完全抽象了比较器代码所需的时间(元素是基本双精度,比较其他对象可能会花费更多的时间)
- 一旦及时编译器找出了代码,它也应该变得快一点
- 你可以很容易地添加测试运行与替代排序算法,看看这些行为
这些数字会因硬件的功能、输入数据类型、计算机上的加载等而有所不同,但您至少可以对预期的结果有一个大致的了解。
您不需要实现任何算法(除非这是家庭作业)。每种语言都有自己的排序函数,它们都非常高效。例如,在c++中,你会使用std::sort
,它在许多实现中使用快速排序(如果元素数量小,则使用插入排序)。