我有这个java代码,可以对一组随机分数进行排序。我需要做的是修改sortArray,使其返回在调用findMinLoc期间进行的比较总数,并修改main以正确调用修改的sortArray,将总数的比较数量捕获到变量中。我对编程很陌生,而且我对如何做到这一点有一个完整的障碍。我试图使用一个计数器,但它总是只显示分数,而不是显示数组按顺序进行多少次比较。
import java.util.Scanner;
public class Lab11
{
public static void main(String[] args)
{
Scanner stdIn = new Scanner(System.in);
final int Size = 10;
double [] scores = new double[Size];
// set all the scores to a random number [0 - 99]
for (int s = 0; s < Size; ++s)
scores[s] = (int)(Math.random() * 100);
// print the scores - original order
System.out.println("Scores - Original");
System.out.println("------------------");
printArray(scores, Size);
System.out.println("\n");
// sort the scores
System.out.println("Sorting ...\n");
// print the scores - sorted order
sortArray(scores, Size);
System.out.println("Size of array = " + Size);
System.out.println("Comparisons needed = \n");
System.out.println("Scores - Sorted");
System.out.println("----------------");
printArray(scores, Size);
System.out.println("\n");
stdIn.close();
}
public static void printArray(double [] arr, int eSize)
{
for (int i = 0; i < eSize; ++i)
System.out.println(arr[i]);
}
public static int findMinLoc(double [] arr, int startInd, int endInd)
{
int minLoc = startInd;
for (int i = startInd; i <= endInd; ++i)
{
if (arr[i] < arr[minLoc])
minLoc = i;
}
return minLoc;
}
public static void swapInArray(double [] arr, int ind1, int ind2)
{
double tmp = arr[ind1];
arr[ind1] = arr[ind2];
arr[ind2] = tmp;
}
public static void sortArray(double [] arr, int eSize)
{
for (int i = 0; i < eSize; ++i)
{
int ind = findMinLoc(arr, i, eSize-1);
swapInArray(arr, i, ind);
}
}
}
应该看起来像.. 分数 - 原创----------------- 69.0 56.0 19.0 70.0 88.0 86.0 56.0 19.0 79.0 20.0 排序......
数组大小= 10 所需的比较= 55
19.0 19.0 20.0 56.0 56.0 69.0 70.0 79.0 86.0 88.0
我尝试的每种方法总是想出所需的caparisons为10,我不明白为什么。关于如何解决这个问题的任何建议?
答案 0 :(得分:0)
如果55是您期望的比较量。 全球定义
static int minLocComps = 0;
并添加增量
for (int i = startInd; i <= endInd; ++i)
{
if (arr[i] < arr[minLoc])
minLoc = i;
minLocComps++; //<-- Here
}
最后打印出来。
System.out.println("Comparisons needed = " + minLocComps +"\n");
答案 1 :(得分:0)
只需全局定义静态计数变量,并在finfMinLoc函数中添加计数增量,如下所示:
static int count=0;
public static int findMinLoc(double [] arr, int startInd, int endInd)
{
int minLoc = startInd;
for (int i = startInd; i <= endInd; ++i)
{
count++;
if (arr[i] < arr[minLoc])
minLoc = i;
}
return minLoc;
}
在print语句中添加count变量:
System.out.println("Comparisons needed = \n" +count);
答案 2 :(得分:0)
只需添加一个计数器并将其放在比较之后:
import java.util.Scanner;
公共课tst { private static int comparisonCount = 0;
Wait
}