我試圖將這個基於邏輯的代碼與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;
}
}
您的交換功能似乎已損壞。你用'int []'交換'int'我建議你決定你正在交換的東西。我懷疑它應該是一個'int []' –