【发布时间】:2015-02-28 23:58:47
【问题描述】:
我正在用Java编写一个演示类来分析以下排序算法:
- 插入排序
- 选择排序
- 冒泡排序
- 合并排序
- 快速排序
我已经在另一个名为 Sort 的类中实现了静态方法。
我想通过使用 omicron 公式确定运行时间和分析复杂性来比较每种算法的最佳、平均和最坏情况。
在演示类中,我只想确定每个算法需要以最佳、平均和最坏情况的数组中数字的顺序对具有不同长度的整数数组进行排序的时间(以纳秒为单位)。
//Best-Case
int[] arrbc0 = {1};
int[] arrbc1 = {1, 2};
int[] arrbc2 = {1, 2, 3};
int[] arrbc3 = {1, 2, 3, 4, 5};
int[] arrbc4 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] arrbc5 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
//Average-Case
int[] arrac1 = {1, 2};
int[] arrac2 = {3, 1, 2};
int[] arrac3 = {4, 2, 3, 1, 5};
int[] arrac4 = {9, 1, 10, 6, 2, 4, 8, 3, 7, 5};
int[] arrac5 = {13, 12, 1, 15, 5, 6, 7, 2, 14, 10, 3, 8, 4, 9, 11};
//Worst-Case
int[] arrwc1 = {2, 1};
int[] arrwc2 = {3, 2, 1};
int[] arrwc3 = {5, 4, 3, 2, 1};
int[] arrwc4 = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int[] arrwc5 = {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
//InsertionSort:
isNanoTime(arrbc0); //first load
isNanoTime(arrbc1);
isNanoTime(arrbc2);
//...
public static void isNanoTime(int[] arr) {
long a1 = System.nanoTime();
Sort.insertionSort(arr);
long a2 = System.nanoTime() - a1;
System.out.println(a2);
}
现在我有一些问题:
- 我能否将这些数组用于这些算法的所有最佳、平均和最坏情况,或者有 f.e. MergeSort 另一个订单的最坏情况?!
- 有没有一种简单的方法可以在对数组进行一次排序后取消排序?
- 这是否是确定时间复杂度的“正确方法”(也许有人有更好的主意)?
【问题讨论】:
-
它可以(某种程度上)展示时间复杂度,但我认为它不能确定它。执行时间和时间复杂度是相关的,但是不同的动物。
-
这将是一个艰难的原因有很多原因,尤其是stackoverflow.com/questions/504103/…
标签: java arrays algorithm sorting time-complexity