如何对排序顺序在另一个数组中的数组进行排序?

时间:2018-01-05 02:48:13

标签: java arrays sorting

layoutSubviews()

3 个答案:

答案 0 :(得分:0)

您希望根据children中的位置对sortAge进行排序。请尝试以下代码

String[] children = {"Arm", "Jo", "Ra", "Jas", "Pre", "She"};
int[] sortAge = {2, 4, 3, 5, 0, 1};

String[] sortedChildren = new String[children.length];      
for (int x = 0; x < children.length; x++) {
    int ref = sortAge[x];   
    sortedChildren[ref] = children[x];   
}

for (int y = 0; y < sortedChildren.length; y++) {
    System.out.println((y + 1) + "\t" + sortedChildren[y]);
}

输出

1   Pre
2   She
3   Arm
4   Ra
5   Jo
6   Jas

答案 1 :(得分:0)

这是我得到的输出,

1
镭 2
预 3
雅 4
她 5
臂 6

因为sortAge的第一个位置是2而子节点[2]是&#34; Ra&#34;,所以sortAge的第二个位置是4而子节点[4]是Pre等

由于您说Pre是最早的(因为sortAge中为0),您必须检查sortAge中最低编号的哪个位置,并跟踪它。然后使用它作为你的&#34; ref&#34;变量以显示孩子的名字。然后,您可以从sortAge数组中删除0并重复。

答案 2 :(得分:0)

我运行代码并按照我期望的顺序得到它们:

1   Ra
2   Pre
3   Jas
4   She
5   Arm
6   Jo

我猜你是在尝试根据第二个数组中的数字按顺序输出第一个数组中的每个子节点,其中第二个数组中的每个数字都是你希望它们在输出中的索引

您的代码

您的代码当前所做的是循环遍历数组sortAge并按顺序打印出sortAge中找到的索引处的子项。为了使用您的算法将孩子放在正确的顺序中,您需要给它输入sortAge = {4,5,0,2,1,3},表示最大的孩子在索引4(Pre),然后是索引为5的孩子(她)等等。

一种可能的解决方案

为了从输入中获得您想要的输出,您需要首先循环以对子项的名称进行排序,然后按排序顺序打印出来(因为尝试实际查找每个孩子的名字效率非常低)在输出顺序中)。

这要求您通过按顺序循环遍历它们并将它们放在您想要的索引中来创建一个新的已排序子项数组:

String[] sortedList = new String[children.length];
for (int i = 0; i < children.length; i++) {
    sortedList[sortAge[i]] = children[i];
}

然后你可以通过像这样循环遍历排序数组中的每个项目:

for (int i = 0; i < sortedList.length; i++) {
    System.out.println((i + 1) + "\t" + sortedList[i]);
}

这将为您提供输出:

1   Pre
2   She
3   Arm
4   Ra
5   Jo
6   Jas