我目前正在一个项目中,我需要使用随机生成的整数创建一个初始数组(anArray),并在另一个数组(arrayB)中精确复制这些随机值。然后,我想使用我的selectionSort()方法对第一个数组进行排序,并使用Arrays.sort()对第二个数组进行排序。我还需要确定每种排序方法需要多长时间。
到目前为止,我可以用随机整数填充第一个数组。我不确定我是否已正确地将anArray复制到arrayB中,因为到目前为止我所编写的代码都无法打印。 anArray根据需要进行排序,并且通过main进行打印没有问题。请到目前为止检查我的代码,如果您能建议在哪里添加时间来安排排序过程,那将也很棒!
for (i=1;i<=28;i++) {
for j in (start,end) {
for k in (a,b,c,d,e,f) {
file = 'chr' + $i + '_' + $j + '_' + $k;
}}}
因此,我希望生成一个按顺序排序的anArray打印清单,并记录对anArray进行排序所花费的时间。
然后,使用arrayB作为anArray中随机整数的精确副本,使用Arrays.sort()对arrayB进行排序,并记录排序时间。
答案 0 :(得分:0)
您的NPE是由于未将arrayB分配给阵列副本的输出引起的。
尝试以下代码:
import java.util.Arrays;
import java.util.Random;
import java.util.Date;
public class TimedSortOne
{
public static int[] anArray; // initializes the first array
public static int[] arrayB; // initializes the second array
/**
* This method produces integers of random values.
* @return int randomNum
*/
private static int randomFill()
{
Random rand = new Random();
int randomNum = rand.nextInt();
return randomNum;
}
private static int[] list()
{
anArray = new int[1000];
for(int i=0;i<anArray.length;i++)
{
anArray[i] = randomFill();
}
return anArray;
}
/**
* This method sorts the values of anArray into ascending order by
* repeatedly finding the largest value and moving
* it to the last index in the array.
* @param int[] anArray
*/
private static void selectionSort(int[] anArray)
{
for (int lastPlace = anArray.length-1; lastPlace > 0; lastPlace--)
{
int maxLoc = 0;
for (int j = 1; j <= lastPlace; j++)
{
if (anArray[j] > anArray[maxLoc])
{
maxLoc = j;
}
}
int temp = anArray[maxLoc];
anArray[maxLoc] = anArray[lastPlace];
anArray[lastPlace] = temp;
}
}
/**
* This method populates arrayB with an exact copy
* of integer values from anArray using System.arraycopy() function.
* @param anArray
* @return arrayB
*/
private static int[] arrayCopyFull(int[] anArray)
{
int[] temp = new int[anArray.length];
System.arraycopy(anArray, 0, temp, 0, anArray.length);
return temp;
}
public static void main(String[] args)
{
list();
arrayB = arrayCopyFull(anArray); //forgot to assigned to arrayB
long startTime = new Date().getTime();
selectionSort(anArray);
long endTime = new Date().getTime();
System.out.println("Time taken for selectionSort(): " + (endTime - startTime) + " seconds.");
startTime = new Date().getTime();
Arrays.sort(arrayB);
endTime = new Date().getTime();
System.out.println("Time taken for Arrays.sort(): " + (endTime - startTime) + " seconds.");
System.out.println("The sorted integers in anArray are:");
for (int numbers : anArray) {
System.out.println(numbers);
}
System.out.println("The sorted integers in arrayB are:");
for (int bNumbers : arrayB) {
System.out.println(bNumbers);
}
}
}
答案 1 :(得分:0)
在您的代码中,arrayB从未初始化。在“ arrayCopyFull()”方法中使用“ arrayB”代替“ temp”。这样可以解决NPE错误。
要计算时间,请点击链接here。它具有可用于添加时间的详细方法。