2013-11-04 70 views
0

我試圖將這個基於邏輯的代碼與quicksort合併到我的主程序中(此處未顯示)。該程序基本上生成二維數組值,並繼續在屏幕上打印出來。變暗變量用作此代碼中的尺寸量(I.e 3D)由於有X,Y,Z座標。我無法理解這是否是使用[dim]對數組進行排序的正確方法。任何建設性的/有益的投入將不勝感激。爲什麼數組未被排序?

輸出示例(不排序吧)(從代碼的最後一位送往證明每一行沒有排序:

[[3, 1, 1, 0], [3, 1, 1, 0], [2, 1, 1, 0], [3, 1, 1, 0], [3, 1, 1, 0], [3, 1, 1, 0], [3, 1, 1, 0], [2, 1, 1, 0], [3, 1, 1, 0], [3, 1, 1, 0]] 
[[4, 5, 3, 0], [4, 5, 3, 0], [2, 1, 1, 0], [4, 5, 3, 0], [4, 5, 3, 0], [4, 5, 3, 0], [4, 5, 3, 0], [2, 1, 1, 0], [4, 5, 3, 0], [4, 5, 3, 0]] 
[[4, 1, 2, 0], [4, 1, 2, 0], [2, 1, 1, 0], [4, 1, 2, 0], [4, 1, 2, 0], [4, 1, 2, 0], [4, 1, 2, 0], [2, 1, 1, 0], [4, 1, 2, 0], [4, 1, 2, 0]] 

實際的程序

//import java.util.ArrayList; 
import java.util.*; 
public class MyQuickSort { 
private static int a[][] = new int [10][4]; 
private static int dim = 3; 

    public static void main(String[] args) { 

     for(int i = 0; i < 10; i++) { 
     //for(int j = 0; j < 4; j++) { 
     a[i][0] = (int)(Math.random() * 6) +1 ; 
     a[i][1] = (int)(Math.random() * 6) +1 ; 
     a[i][2] = (int)(Math.random() * 6) +1 ; 

     quickSort(a, 0, a.length - 1); 
     System.out.println(Arrays.deepToString(a)); 
     //} 
    } 

    } 

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

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

     int x = a[p][dim]; 
     int i = p-1 ; 
     int j = r+1 ; 

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

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

    private static void swap(int[][] a, int i, int j) { 
     // TODO Auto-generated method stub 
     int temp = a[i][dim]; 
     a[i] = a[j]; 
     a[j][dim] = temp; 
    } 
} 
+0

您的交換功能似乎已損壞。你用'int []'交換'int'我建議你決定你正在交換的東西。我懷疑它應該是一個'int []' –

回答

0

由於您的所有個人數字是非負數的單位數字整數,爲什麼不把數組元素轉換爲字符串 - 即[3, 1, 1, 0]作爲字符串 - 並像這樣快速排列它們?排序順序最終會像循環一樣上面的每個元素單獨和比較t他的數值。

+0

我以10爲例,稍後在我的程序中,用戶可以選擇輸入他希望使用的數字範圍和他想要的點數生成。 – ClearCutFan

+0

這不是我在這裏做的:System.out.println(Arrays.deepToString(a)); – ClearCutFan

+0

我該如何去做到這一點? – ClearCutFan

相關問題