QuickSort Random Real Numbers 独自のカスタムランダマイザーを使用して、150 個の数値のランダムな配列を生成します。1)番号をソートせずに表示します。2)ストップウォッチを起動し、時刻を表示します。3)QuickSort を使用して配列を並べ替えます。4)ストップウォッチを停止し、実行時間を表示します。5)番号を昇順にソートして表示します。
Heres私の乱数発生器クラス
/**
*/
class RandomGenerator
{
public RandomGenerator()
{
}
public double randomLong(double shift)
{
long x = System.nanoTime();
x ^= (x <<(int)(shift/100));
x ^= (x >>>(int)(shift%10));
x ^= (x << (int)Math.sqrt(shift));
if ((x>0)||(x<0))
{
return x;
}
else
return(randomLong(System.nanoTime()*Math.sqrt(System.nanoTime())));
}
}
これが私のクイックソートクラスです
public class QuickSort
{
public QuickSort()
{
}
public double[] sort(double[] a)
{
sort(a, 0, a.length - 1);
return(a);
}
private void sort(double[] a, int from, int to)
{
if (from >= to){return; }
int p = partition(a, from, to);
sort(a, from, p);
sort(a, p + 1, to);
}
private int partition(double[] a, int from, int to)
{
double pivot = a[from];
int i = from - 1;
int j = to + 1;
while(i < j)
{
i++; while (a[i] < pivot) {i++;}
j--; while (a[j] > pivot) {j--;}
if(i < j)
{
double temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
return j;
}
}
これが私のストップウォッチクラスです
/**
A stopwatch accumulates time when it is running. You can
repeatedly start and stop the stopwatch. You can use a
stopwatch to measure the running time of a program.
*/
public class StopWatch
{
private long elapsedTime;
private long startTime;
private boolean isRunning;
/**
Constructs a stopwatch that is in the stopped state
and has no time accumulated.
*/
public StopWatch()
{
reset();
}
/**
Starts the stopwatch. Time starts accumulating now.
*/
public void start()
{
if (isRunning) { return; }
isRunning = true;
startTime = System.currentTimeMillis();
}
/**
Stops the stopwatch. Time stops accumulating and is
is added to the elapsed time.
*/
public void stop()
{
if (!isRunning) { return; }
isRunning = false;
long endTime = System.currentTimeMillis();
elapsedTime = elapsedTime + endTime - startTime;
}
/**
Returns the total elapsed time.
@return the total elapsed time
*/
public long getElapsedTime()
{
if (isRunning)
{
long endTime = System.currentTimeMillis();
return elapsedTime + endTime - startTime;
}
else
{
return elapsedTime;
}
}
/**
Stops the watch and resets the elapsed time to 0.
*/
public void reset()
{
elapsedTime = 0;
isRunning = false;
}
}
これが私のビューアクラスまたはメインメソッドです(これについては本当に助けが必要です)
public class QsortViewer
{
private static final int MAX_ELEMENTS=150;
public static void main(String[] args)
{
RandomGenerator RG = new RandomGenerator();
QuickSort QS = new QuickSort();
StopWatch SW = new StopWatch();
double[] numbers = new double[MAX_ELEMENTS];
for (int i = 0; i <= numbers.length-1; i++)
{
numbers[i] = RG.randomLong(i*i*Math.sqrt(i)*Math.pow(i,i));
}
}
}
私のクラスはすべて正しいです。助けが必要なのは、1)数字をソートせずに表示することだけです。2)ストップウォッチを起動し、時刻を表示します。3)QuickSort を使用して配列を並べ替えます。4)ストップウォッチを停止し、実行時間を表示します。5)番号を昇順にソートして表示します。これで私のメイン メソッドは部分的に完成したので、メイン メソッドを完成させるための助けを得ることができますか。これは、適切なクラスを呼び出し、配列を並べ替えて表示することを意味します。ありがとうございました