Java 为什么数组没有被排序?
我正试图将这个基于逻辑的代码和快速排序合并到我的主程序中(这里没有显示)。该程序基本上生成2d数组值,并继续在屏幕上打印出来。dim变量用作此代码中的尺寸量(即3D),因为有X、Y、Z坐标。我很难理解这是否是使用[dim]对数组进行排序的正确方法。如有任何建设性/有益的意见,将不胜感激 示例输出(未排序)(取自代码的最后一位,以证明每行未排序:Java 为什么数组没有被排序?,java,arrays,sorting,constructor,Java,Arrays,Sorting,Constructor,我正试图将这个基于逻辑的代码和快速排序合并到我的主程序中(这里没有显示)。该程序基本上生成2d数组值,并继续在屏幕上打印出来。dim变量用作此代码中的尺寸量(即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
[[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;
}
}
//导入java.util.ArrayList;
导入java.util.*;
公共类MyQuickSort{
私有静态整数a[][]=新整数[10][4];
私有静态int dim=3;
公共静态void main(字符串[]args){
对于(int i=0;i<10;i++){
//对于(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;
快速排序(a,0,a.长度-1);
System.out.println(Arrays.deepToString(a));
//}
}
}
公共静态void快速排序(int[]a、int p、int r)
{
如果(pp&a[j][dim]>x)
j--;
if(i既然所有的数字都是非负的单位数整数,为什么不将数组元素转换成字符串呢?也就是说,[3,1,1,0]
作为字符串--并像那样对它们进行快速排序?排序顺序将与分别遍历上述元素并比较数值时的顺序相同。我以10为例,稍后在我的程序中,用户可以选择输入他希望使用的数字范围和数字数量他想要生成的点。这不是我在这里要做的:System.out.println(Arrays.deepToString(a));我该怎么做呢?添加前导零,这样所有的数字都是固定长度的。:)除此之外,你是对的:如果你的用例超出了你在问题中发布的范围,我的方法就行不通了。我的第一条评论是对你第一条评论的回应。作为对第三条评论的回应,更简单的方法是通过简单地将所有数字涂抹在一起来构建字符串:3110
。您的交换功能似乎已中断。您正在用int[]
交换int
我建议您决定要交换什么。我怀疑它应该是一个int[]