排序算法比较

时间:2014-11-07 13:35:18

标签: java arrays algorithm sorting

我有一个项目,我需要测试3种排序算法,并找出其中哪一项是插入排序,冒泡排序,选择排序。我无法达到这些方法所以我在Java中使用秒表进行测试。我创建了3个数组。

int[] arr = new int[100000]; //This array is sorted
int[] randomarr = new int[100000]; //This array is random
int[] reversearr = new int[100000]; //This array is reversed

我测试了这些算法,这是我的结果:

- sort1 

 Sorted array took 11 seconds--Reversed array took 13 seconds--Random array took 24 seconds

- sort2

 Sorted array took 12 second--Reversed array took 12 seconds--Random array took 10 seconds

- sort3

 Sorted array took 1 millisecond--Reversed array took 12 seconds--Random array took 4 seconds

我很确定sort3是Insertion排序,因为它比Sorted数组中的其他排序更快。但我对sort1和sort2感到困惑。冒泡排序最好的情况是O(n),插入排序在最好的情况下也有O(n)但是当我检查我的结果时,插入排序最佳情况是1毫秒,所以冒泡排序的最佳情况应该是1毫秒呢?我该如何比较它们?

1 个答案:

答案 0 :(得分:4)

所以你显然必须找出哪种方法可以检查各种数组的排序时间。

以下是每种算法的一些细节(列是最佳,平均,最差,最佳空间);

enter image description here

因此,您可以通过将不同大小的已排序列表传递给算法,并查看所需的时间,快速找出哪一个是选择排序。以二次方式行动的是selection sort

然后,要在bubble sortinsertion sort之间做出决定,您需要更深入地了解算法的工作原理。 bubble sort有一个亲切命名的问题; dinosaurs and turtles,即开头的大元素很快得到处理,但最后的小元素处理效率低下。然后,您可以尝试使用排序列表分析剩余的两个算法(bubbleinsertion),最后一个元素是最小的,并看看它们是如何做的。效果更好的是插入排序。

如果在不同大小的数组上完成这些测试,只使用这些算法的简单版本,我会得到以下结果:

enter image description here

所以,基于以上信息,我知道sort1是冒泡排序,sort3是选择排序,sort2是插入排序。