0

我的程序使用选择排序处理比较次数。它返回错误的组合数。comp哪里出错了?

我的演示:

    ArrayI[] ints = new ArrayI[5];


    ints[0] = new ArrayInts(3);
    ints[1] = new ArrayInts(9);
    ints[2] = new ArrayInts(6);
    ints[3] = new ArrayInts(1);
    ints[4] = new ArrayInts(2);




    SelectionSort.selectionSort(myInts);

    System.out.println(" ");

    System.out.println("Sorted array: ");

    for(ArrayI ints:myInts){
        System.out.println(ints);
    }

    System.out.println(" ");

    System.out.println("Number of comparisons: " + SelectionSort2.selectionSort2(ints));  
4

1 回答 1

4

那是因为,您正在增加内部循环之外的比较。所以比较的值将等于你的外循环运行的次数。将增量移动到内循环:

你真的不需要这个min变量。if您可以在块内移动交换逻辑。您应该将代码修改为:

for(int index = 0; index < data.length-1; index++) {

    for(int scan = index+1; scan < data.length; scan++) {
        comparisons++;  // Each inner loop does one comparison

        if(data[scan].compareTo(data[min]) < 0) {
            temp = data[scan];
            data[scan] = data[index];
            data[index] = temp;
        }
    }   
}

我真的不明白你创建ArrayInts课程的意义。这是完全没有必要的。您可以简单地使用Integer包装类。仅供参考,您有一种Arrays#sort(Object[])方法可以为您进行排序。

于 2013-09-01T06:10:05.837 回答