Java 快速排序方法的计时
我正在写一个程序来比较不同的排序算法的速度。在大多数情况下,我可以从每个算法开始Java 快速排序方法的计时,java,arrays,algorithm,sorting,Java,Arrays,Algorithm,Sorting,我正在写一个程序来比较不同的排序算法的速度。在大多数情况下,我可以从每个算法开始 long startTime = System.currentTimeMillis(); 并以 long stopTime = System.currentTimeMillis(); long elapsedTime = stopTime - startTime; System.out.println(elapsedTime + " milliseconds"); 但是,因为快速排序是递归的,所以它无法工作,因
long startTime = System.currentTimeMillis();
并以
long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime;
System.out.println(elapsedTime + " milliseconds");
但是,因为快速排序是递归的,所以它无法工作,因为它将为每个递归打印一个时间,而不是总运行时间
我的代码
public static void quickSort(int[] arr, int low, int high) {
if (arr == null || arr.length == 0)
return;
if (low >= high)
return;
// pick the pivot
int middle = low + (high - low) / 2;
int pivot = arr[middle];
// make left < pivot and right > pivot
int i = low, j = high;
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
// recursively sort two sub parts
if (low < j)
quickSort(arr, low, j);
if (high > i)
quickSort(arr, i, high);
if ((low >= j) && (high <= i)) {
}
}
publicstaticvoidquicksort(int[]arr,int-low,int-high){
如果(arr==null | | arr.length==0)
返回;
如果(低>=高)
返回;
//选择支点
int middle=低+(高-低)/2;
int pivot=arr[中间];
//使左<枢轴和右>枢轴
int i=低,j=高;
而(我){
j--;
}
如果(i)
快速排序(arr、i、高);
if((low>=j)&(high不度量递归方法内部的性能。要么在一些private
助手方法中移动方法的核心代码,要么在调用它的方法中度量,例如在main
方法中
助手方法变量:
public static void quickSort(int[] arr, int low, int high) {
long startTime = System.currentTimeMillis();
// Call the helper
quickSortHelper(arr, low, high);
long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime;
System.out.println(elapsedTime + " milliseconds");
}
private static void quickSortHelper(int[] arr, int low, int high) {
// All code goes here, adjust calls
// to 'quickSort', they should now call 'quickSortHelper'
}
请注意,您的技术只是一种快速获得粗略估计的方法。如果这样做,会有许多影响扰乱您的微观基准。例如JVM噪音(在启动时),尤其是缓存影响(使用相同或类似输入重复调用该方法会非常快,因为它们已经被缓存)
您可以阅读此问题以了解更多详细信息:请注意,使用System.currentTimeMillis
通常并不是衡量算法性能的好方法。除了使用像JMH这样的完整基准测试工具之外,几乎没有什么方法可以获得准确、有用的性能比较用另一种方法。然后你就可以从最上层的时间里包装方法。