-2

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)番号を昇順にソートして表示します。これで私のメイン メソッドは部分的に完成したので、メイン メソッドを完成させるための助けを得ることができますか。これは、適切なクラスを呼び出し、配列を並べ替えて表示することを意味します。ありがとうございました

4

1 に答える 1