1

基本的に、プログラムは距離インデックスを含む x、y、z 座標の位置を生成します。プログラムはそれらを指定された各インデックスに格納し、並べ替えに進みます。結果の出力はソートされますが、一部の列は一連のゼロを出力します (配列がその位置で生成されないかのように)。どんな助けでも大歓迎です!

出力例:

(0.0),(0.0),(0.0)),(0.0)
(0.0),(0.0),(0.0)),(0.0)
(0.0),(0.0),(0.0)),(0.0)
(0.0),(0.0),(0.0)),(0.0)
(0.0),(0.0),(0.0)),(0.0)
(2.1933026),(3.873999),(2.6528487)),(5.1822824)
(2.1933026),(3.873999),(4.9137025)),(6.6304536)
(3.4213266),(5.4315333),(5.976922)),(8.771011)
(4.084449),(5.4315333),(5.976922)),(9.050297)
(6.4669027),(5.4315333),(5.976922)),(10.346303)

メインプログラム

//import java.util.ArrayList;

import java.util.*;
public class MyQuickSort {
  private static float a[][] = new float [10][4];

  public static void main(String[] args) {
    System.out.println("(" + "X Length" + "),(" + "Y Length" + "),(" + "Z Length" + "),(" + "Distance Length" + ")");
    for(int i = 0; i < a.length ; i++) {
      for(int j = 0; j < 3; j++) {
        a[i][j] = (float)(Math.random () * 6) +1 ;
        //a[i][3] = (float)Math.sqrt((a[i][0] * a[i][0]) + (a[i][1] * a[i][1]) + (a[i][2] * a[i][2]));
        for (int k = 0; k < 4; k++ ) {
          quickSort(a, 0, a.length - 1,k);
        }
      }
              a[i][3] = (float)Math.sqrt((a[i][0] * a[i][0]) + (a[i][1] * a[i][1]) + (a[i][2] * a[i][2]));
      System.out.println("(" + a[i][0] + "),(" + a[i][1] + "),(" + a[i][2] + ")" + "),(" + a[i][3] + ")"); 
    }
  }

  public static void quickSort(float[][] a, int p, int r,int k)
  {
    if(p<r)
    {
      int q=partition(a,p,r,k);
      quickSort(a,p,q,k);
      quickSort(a,q+1,r,k);
    }
  }

  private static int partition(float[][] a, int p, int r,int k) {

    float d = a[p][k];
    int i = p-1 ;
    int j = r+1 ;

    while (true) {
      i++;
      while ( i< r && a[i][k] < d)
        i++;
      j--;
      while (j>p && a[j][k] > d)
        j--;

      if (i < j)
        swap(a, i, j,k);
      else
        return j;
    }
  }

  private static void swap(float[][] a, int i, int j, int k) {

    float temp = a[i][k];
    a[i][k] = a[j][k];
    a[j][k] = temp;
  }
}
4

2 に答える 2

3

配列の初期化と並べ替えが混在しています - それが問題です。最初の反復では、最初の要素を埋めてから並べ替えを実行します。これにより、この要素は初期化されていないゼロよりも大きいため、配列の最後に移動します。ソート後、ゼロで埋められた最初の要素を出力します。これは、初期化された要素の数が初期化されていない要素の数よりも大きくなる 6 回目の繰り返しまで発生します。

おそらく、コードを初期化、ソート、および印刷の 3 つの部分に分割する必要があります。

于 2013-11-06T00:08:31.143 に答える
0

ループで並べ替えます。これは、入力された値が最後まで並べ替えられ、後で上書きされることを意味します。

修正: 最初に i/j ループを実行して入力し、次に一度並べ替えてから、別のループを実行してデータを出力します。

于 2013-11-06T00:08:21.673 に答える