我无法使用Java中的Selection Sort来计算int数组的交换和比较次数。我对交换和比较计数在循环中的位置感到困惑。任何指导都将不胜感激。
public class IntSelectionSorter {
public static int count = 0;
public static int count2 = 0;
public static void selectionSort(int[] array)
{
int startScan;
int index;
int minIndex;
int minValue;
for (startScan = 0; startScan < (array.length - 1); startScan++)
{
minIndex = startScan;
minValue = array[startScan];
for (index = startScan + 1; index < array.length; index++)
{
count2++;
if (array[index] < minValue)
{
minValue = array[index];
count++;
minIndex = index;
}
}
array[minIndex] = array[startScan];
count++;
array[startScan] = minValue;
count++;
}
}
}
答案 0 :(得分:0)
count2似乎是正确的。计数应更改如下:
for (startScan = 0; startScan < (array.length - 1); startScan++)
{
minIndex = startScan;
minValue = array[startScan];
for (index = startScan + 1; index < array.length; index++)
{
count2++;
if (array[index] < minValue)
{
minValue = array[index];
// count++; delete this
minIndex = index;
}
}
if (minIndex != startScan) {
array[minIndex] = array[startScan];
count++;
array[startScan] = minValue;
}
}
基本上,只有当需要交换时才增加计数,即当startScan中的数组中的另一个数字小于startScan的值时。
答案 1 :(得分:0)
public class SortingTest {
public static void main(String[] args)
{
int[] values = { 1,53,86,21,49,32,90,65,33,11,34,68,54,32,78,80,35,22,96,59,265,44324,123,3123,25435};
System.out.println("Original Order: ");
for (int element : values)
System.out.print(element + " ");
IntBubbleSorter.bubbleSort(values);
System.out.println("\nSorted order: ");
for (int element : values)
System.out.print(element + " ");
System.out.println();
System.out.print("\n Bubble Sort Swaps:" + IntBubbleSorter.count);
System.out.print("\n Bubble Sort Comparisons:" + IntBubbleSorter.count2);
System.out.println();
System.out.println("\nOriginal Order: ");
for (int element : values)
System.out.print(element + " ");
IntSelectionSorter.selectionSort(values);
System.out.println("\nSorted order: ");
for (int element : values)
System.out.print(element + " ");
System.out.println();
System.out.print("\n Selection Sort Swaps:" + IntSelectionSorter.count);
System.out.print("\n Selection Sort Comparisons:" + IntSelectionSorter.count2);
System.out.println();
System.out.println("\nOriginal Order: ");
for (int element : values)
System.out.print(element + " ");
IntInsertionSorter.insertionSort(values);
System.out.println("\nSorted order: ");
for (int element : values)
System.out.print(element + " ");
System.out.println();
System.out.print("\n Insertion Sort Swaps:" + IntInsertionSorter.count);
System.out.print("\n Insertion Sort Comparisons:" + IntInsertionSorter.count2);
}
}