在我的排序程序的Java代码中(使用我的insertionsort算法实现对100000个整数进行排序),我试图找出数组中元素的交换次数.我将其设置为静态变量,因为sort()方法是静态的.
但是,在程序运行期间的某个时候,我认为整数限制被越过,最终计数显示为负数.必须有办法纠正这个并得到数字正确的数字,但我无法弄明白这一点.你可以帮忙吗?
public class InsertionSort {
private static int exchcount=0;
public static void exch(Comparable[] a, int i,int j){
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static int exchangeCount(){
return exchcount;
}
public static void sort(Comparable[] a){
int N = a.length;
for(int i=0; i< N;i++){
for(int j=i; j>0 && less(a[j],a[j-1]); j--){
exch(a,j,j-1);
exchcount++;
}
}
}
...
public static void main(String[] args) {
Integer[] a = RandomNumberArrayGenerator.generate(100000);
sort(a);
System.out.println("number of exchanges="+ exchangeCount());
}
Run Code Online (Sandbox Code Playgroud)
这给了
number of exchanges= -1799089211
Run Code Online (Sandbox Code Playgroud)
最简单的是将计数器变为a long而不是int.这将使您最多可以计算9,223,372,036,854,775,807.
如果每个exch()CPU占用一个CPU周期,则在3GHz计算机上需要大约100年才能使long计数器溢出.
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |