当前位置: 首页 > 知识库问答 >
问题:

Java:根据另一个数组的索引顺序对数组排序

徐涵亮
2023-03-14

在 Java 中,如何根据另一个排序数组的索引顺序对数组进行排序?例如,如果我有:

arr1 = {26, 8, 3}
arr2 = {3, 1, 2}
arr3 = {57, 23, 11}
arr4 = {78, 2, 61}

我按升序对 arr2 进行排序

arr2 = {1, 2, 3}

我希望另一个是:

arr1 = {8, 3, 26}
arr3 = {23, 11, 57}
arr4 = {2, 61, 78}

我怎么能做到这是Java?我知道我会保存新的排序数组到新的实例。任何帮助,谢谢!

共有2个答案

张茂勋
2023-03-14

这里有一种方法。

    < li >根据数组内容对目标数组的索引进行排序。 < li >然后使用该索引数组根据索引数组映射所有数组。
Integer[] indices = IntStream.range(0, arr2.length)
        .boxed()                 
        .sorted(Comparator.comparing(i -> arr2[i]))        
        .toArray(Integer[]::new);
                          
List<int[]> list = Stream
        .of(arr1, arr2, arr3, arr4).map(arr -> Stream
                .of(indices)
                .mapToInt(i -> arr[i])
                .toArray())
        .collect(Collectors.toList());
        
list.forEach(arr -> System.out.println(Arrays.toString(arr))); 

打印

[8, 3, 26]
[1, 2, 3]
[23, 11, 57]
[2, 61, 78]

您也可以将这些数组放在另一个< code >“2D”数组中,并按如下方式操作,结果相同。

int[][] arrays = { arr1, arr2, arr3, arr4 };

List<int[]> list = Arrays
        .stream(arrays)
        .map(arr -> Stream
                .of(indices)
                .mapToInt(i -> arr[i])
                .toArray())
        .collect(Collectors.toList());

夏俊人
2023-03-14

在别处找到了答案

public class SortTogether{

    // sort the array a, and also update the elements in array b, c, and d
    // based on the index of a
    public static void bubbleSort(int[] a, int[] b, int[] c, int[] d) {

        for(int i=0; i<a.length; i++){
            for(int j=0; j<a.length-i-1;j++){
                if(a[j]>a[j+1]){
                    // when you are swapping the elements
                    int t = a[j]; a[j]=a[j+1];a[j+1]=t;
                    // swap the elements in the other arrays as well
                    // so the elements in other array will also stay together
                    t = b[j]; b[j]=b[j+1];b[j+1]=t;
                     t = c[j]; c[j]=c[j+1];c[j+1]=t;
                    t = d[j]; d[j]=d[j+1];d[j+1]=t;
                }
            }
        }

    }


    public static void main(String a[]) {
        int[] arr1 = {26, 8, 3};
        int[] arr2 = {3, 1, 2};
        int[] arr3 = {57, 23, 11};
        int[] arr4 = {78, 2, 61};
        System.out.println("Before sort");
        display(arr1);
        display(arr2);
        display(arr3);
        display(arr4);

        bubbleSort(arr2,arr1,arr3,arr4);

        System.out.println("\nAfter sort");
        display(arr1);
        display(arr2);
        display(arr3);
        display(arr4);

    }



    public static void display(int[] arr) {

        for (int num : arr) System.out.printf("%4d", num);
        System.out.println();
    }
}
 类似资料:
  • 问题内容: 我有多个数组,我想根据其中一个的排序顺序对所有数组进行排序,如下所示: 我希望函数执行后,数组将如下所示: 问题答案: 您可以执行以下操作:首先根据键控数组的索引的索引对它们进行索引的值对它们进行排序,然后使用: 如果要在任何类型的集合上使它通用(但仍以与std lib集合算法相同的样式返回数组): 以及带有自定义比较器的版本:

  • 我有多个数组,我想根据其中一个数组的排序顺序对所有数组进行排序,如下所示: 我预计函数执行后的数组将如下所示:

  • 问题内容: 是否可以对看起来像这样的数组进行排序和重新排列: 匹配此数组的安排: 不幸的是,我没有任何要跟踪的ID。我将需要优先处理items-array,以使其尽可能接近sortingArr。 更新: 这是我正在寻找的输出: 任何想法如何做到这一点? 问题答案: 就像是: 这是一个较短的代码,但是会破坏数组:

  • 我有两个整数数组,我试图根据另一个数组对第一个数组进行排序。 例如。和 b = {1,2,2,0,0, 在 B 中排序的值是 A 中每个整数的实值 排序后我期望的预期结果是: 这是我用的代码 它给出了我的输出:<code>a={2,3,1,0,0,6}和

  • 我试图通过结合两种算法来返回最佳路径来解决旅行商问题 第一种算法使用环境ArrayList生成最佳路径 第二种算法将优化第一种算法获得的路由,但在这样做时,我需要创建一个新的ArrayList,即环境ArrayList,它被洗牌以匹配最佳路径数组的顺序 请你帮我做这个,因为我在洗牌环境数组列表时遇到了麻烦 这是环境ArrayList,其中每个节点由name、x cords、y cords组成: 返