我必须对不同大小和时间的不同数量的数组进行排序。我的计时器给我的时间很短,单位是纳秒,但大部分时间都是零。我已经更改了开始和结束计时器的点,试图解决这个问题,但没有成功。有人能告诉我我的计时器有什么问题吗?
import java.util.Random;
import java.util.Scanner;
public class BubbleSort
{
public static void main(String[] args) {
Random rand = new Random();
Scanner input = new Scanner(System.in);
int m;
int n = 0;
int num_i = 0;
long startTime = System.nanoTime();
long running_time;
int temp;
System.out.print("Input array size: ");
n = input.nextInt();
System.out.print("Input number of arrays: ");
num_i = input.nextInt();
for(int j = 0; j < num_i; j++){
}
int array[] = new int [n];
for(int i = 0; i < n; i++)
{
for( m = 0; m < array.length; m++){
array[m] = (int)(Math.random()*100);
}
//int[] sorted = new int[n];
for (int k = 0; k < array.length; k++) {
for (int j = 1; j < (array.length - k); j++) {
//System.out.println("Start Time: " + startTime);
startTime =System.nanoTime();
if (array[j - 1] > array[j]) {
temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
}
long endTime = System.nanoTime();
running_time = endTime - startTime;
// System.out.println("End Time: " + endTime);
System.out.println(running_time);
}
}
}
}
}发布于 2017-03-30 09:48:25
一个问题是,代码只测试if和entire代码所需的时间,而不是整个冒泡排序。我做了一个简化的版本,排序3万个数字需要大约一秒钟的时间。
在大多数系统上,计时器的频率不是纳秒,这取决于计算机和操作系统。在我的系统上,Intel3770K3.5Ghz,在Windows764位模式下,计时器以3.410312 mhz的速度运行,或者说每个“滴答”大约293.2283纳秒。在Windows XP下,计时器的运行速度约为3.5 the,或者说每“滴答”的.2857纳秒,但如今这种情况可能很少见。
如果测试运行时间为零,请使用更大的数组进行测试。您可以多次重复测试,但是缓存来自多个运行的数据将影响结果。
public static void main (String args[])
{
Random rand = new Random();
int m;
long startTime;
long endTime;
long running_time;
int temp;
int n = 30000; // set to value rather than input from user
int array[] = new int [n];
for( m = 0; m < array.length; m++){
array[m] = (int)(Math.random()*100);
}
// benchmark sort time
startTime =System.nanoTime();
for (int k = 0; k < array.length; k++) {
for (int j = 1; j < (array.length - k); j++) {
if (array[j - 1] > array[j]) {
temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
}
}
}
endTime = System.nanoTime();
running_time = endTime - startTime;
System.out.println(running_time);
}
}https://stackoverflow.com/questions/43105965
复制相似问题