描述
除非有特异功能,否则一个人是不能想象思维空间的样子的。但是,我么可以用计算机处理四维数据。四维空间的一个点可以用一个四元组(t, u, v, w)表示。你的任务很明确:给你若干个四元组,请把它们由小到大排序并输出。排序时,第一维比第二维优先,第二维比第三维优先,第三维比第四维优先。也就是说,先看t,如果t相同,再看u,…
输入
第一行是一个整数n,在[2,20]之间,表示要输入的案例的数量。后面紧跟n个案例。对每个案例,第一行是一个整数mi,在[2, 200]之间,表示该案例中数列元素的数量,后面紧跟mi行,每行有4个整数,一个四元组,相邻两个整数间用一个空格隔开,每个元素的范围都是[-5000, 5000]。
输出
对每一个案例,输出由小到大排序后的整个序列,每个四元组占一行。
输入样例
2
3
4 5 3 2
3 4 2 1
3 6 1 2
2
-1 10 9 7
-2 5 3 6
输出样例
3 4 2 1
3 6 1 2
4 5 3 2
-2 5 3 6
-1 10 9 7
参考程序
import java.util.*;
class List_Node
{
int ArrayGroup[];
List_Node(int a,int b,int c,int d)
{
ArrayGroup=new int[4];
ArrayGroup[0]=a;
ArrayGroup[1]=b;
ArrayGroup[2]=c;
ArrayGroup[3]=d;
}
}
public class Main
{
public static void sort(List_Node[] a,int n)//n表示四元组的数量
{
int i,j;
List_Node temp;
for(i=1;i<=n-1;i++)//控制冒泡排序的次数,即n-1次
{
for(j=0;j<=n-2;j++)//控制参与排序下标,即0~n-2
{
if(a[j].ArrayGroup[0]>a[j+1].ArrayGroup[0])
{//交换
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
else if(a[j].ArrayGroup[0]==a[j+1].ArrayGroup[0])
{
if(a[j].ArrayGroup[1]>a[j+1].ArrayGroup[1])
{//交换
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
else if(a[j].ArrayGroup[1]==a[j+1].ArrayGroup[1])
{
if(a[j].ArrayGroup[2]>a[j+1].ArrayGroup[2])
{//交换
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
else if(a[j].ArrayGroup[2]==a[j+1].ArrayGroup[2])
{
if(a[j].ArrayGroup[3]>a[j+1].ArrayGroup[3])
{//交换
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
}
}
}
public static void main(String[] args)
{
Scanner reader=new Scanner(System.in);
int n,mi;
n=reader.nextInt();
while(n-->0)
{
int i,j;
mi=reader.nextInt();
List_Node[] TestGroupArray=new List_Node[mi];
for(i=0;i<mi;i++)
{
TestGroupArray[i]=new List_Node(reader.nextInt(),reader.nextInt(),
reader.nextInt(),reader.nextInt());
}
sort(TestGroupArray,mi);
for(i=0;i<mi;i++)
{
System.out.printf("%d %d %d %d\n",TestGroupArray[i].ArrayGroup[0],
TestGroupArray[i].ArrayGroup[1],
TestGroupArray[i].ArrayGroup[2],
TestGroupArray[i].ArrayGroup[3]);
}
}
}
}
计算机小白,水平较低,欢迎大家批评指正!期待有更好的思路!