【发布时间】:2012-12-06 21:51:01
【问题描述】:
我编写了一个冒泡排序程序,可以将 10000 个唯一值按顺序排序。
我已经运行了这个程序,它给了我一个时间输出(使用 nanoTime)来表示程序完成所花费的时间,但我希望在程序代码中添加另一个输出;程序从开始到结束排序需要多少步。
代码如下:
public class BubbleSort {
public static void main(String[] args) {
int BubArray[] = new int[]{#here are 10000 integers#};
System.out.println("Array Before Bubble Sort");
for(int a = 0; a < BubArray.length; a++){
System.out.print(BubArray[a] + " ");
}
double timeTaken = bubbleSortTimeTaken(BubArray);
bubbleSort(BubArray);
System.out.println("");
System.out.println("Array After Bubble Sort");
System.out.println(" Time taken for Sort : " + timeTaken + " milliseconds.");
for(int a = 0; a < BubArray.length; a++){
System.out.print(BubArray[a] + " ");
}
}
private static void bubbleSort(int[] BubArray) {
int z = BubArray.length;
int temp = 0;
for(int a = 0; a < z; a++){
for(int x=1; x < (z-a); x++){
if(BubArray[x-1] > BubArray[x]){
temp = BubArray[x-1];
BubArray[x-1] = BubArray[x];
BubArray[x] = temp;
}
}
}
}
public static double bubbleSortTimeTaken(int[] BubArray) {
long startTime = System.nanoTime();
bubbleSort(BubArray);
long timeTaken = System.nanoTime() - startTime;
return timeTaken;
}
}
代码执行并输出我想要的方式:
Array Before Bubble Sort
13981 6793 2662 10986 733 10107 2850 ...
Array After Bubble Sort
10 11 17 24 35 53 57 60 61 78 83 89 128 131 138 141 ....
Time taken for Sort : 1.6788472E7 milliseconds.
但我希望在代码中添加另一个输出,它告诉我需要完成多少移动(基本上是移动计数器),即:
Time taken for Sort : 1.6788472E7 milliseconds.
Total number of moves: 3000
这有意义吗? 任何帮助将不胜感激,谢谢。
【问题讨论】:
-
对什么有意义?你为什么对这样的价值观感兴趣?
-
听起来您需要声明一个变量来跟踪移动次数,并在算法移动一个值时向其添加一个 (++?)。然后你只需要在最后输出那个变量。
-
顺便问一下,我们给
bubbleSort(BubArray);打了两次电话吗?一次在bubbleSortTimeTaken和一次在main?如果您想获得运行时间,只需从main中删除一个调用
标签: java runtime bubble-sort