Java 如何以排序形式存储int数组的原始索引?

Java 如何以排序形式存储int数组的原始索引?,java,arrays,sorting,Java,Arrays,Sorting,我想先存储数组元素的原始索引号,然后再按升序排序 假设数组中的元素是 x[]={20,40,70,80,50,30} 我希望另一个数组返回排序后的索引号,如 排序[]={0,5,1,4,2,3} 我试了很多次。但我不知道如何得到索引号。每次交换后索引号都会更改 注: 我不能用比较器、映射、数组、排序之类的东西。我有 仅使用循环 我已经搜索了所有的网站。我找不到任何具体的答案。 因为他们都使用比较器映射或者其他我没有的东西 目前允许使用 public static int[] sort(int[

我想先存储数组元素的原始索引号,然后再按升序排序

假设数组中的元素是

x[]={20,40,70,80,50,30}

我希望另一个数组返回排序后的索引号,如

排序[]={0,5,1,4,2,3}

我试了很多次。但我不知道如何得到索引号。每次交换后索引号都会更改

注:

  • 我不能用比较器、映射、数组、排序之类的东西。我有 仅使用循环
  • 我已经搜索了所有的网站。我找不到任何具体的答案。 因为他们都使用比较器映射或者其他我没有的东西 目前允许使用

    public static int[] sort(int[] numbers) {
        int[] sorted = new int[numbers.length];
        int temp;
        int[] index= new int[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            for (int j = i+1; j < numbers.length; j++) {
                if (numbers[i] > numbers[j]) {
                    temp = numbers[i];
                    numbers[i] = numbers[j];
                    numbers[j] = temp;
                    index[i]= j;
                }
            }
        }
        return index;
    }
    
    公共静态int[]排序(int[]数字){
    int[]排序=新int[numbers.length];
    内部温度;
    int[]索引=新的int[numbers.length];
    for(int i=0;i数字[j]){
    温度=数字[i];
    数字[i]=数字[j];
    数字[j]=温度;
    指数[i]=j;
    }
    }
    }
    收益指数;
    }
    

    • 我想这就是你想要的:

    • 在地图上标出位置
    • 分类
    • 在排序之前查找索引的映射 PS:由于重复,复杂性会出现。你需要处理 在另一张地图的帮助下
    • 请参阅此处的工作代码

      import java.util.ArrayList;
      导入java.util.array;
      导入java.util.Collections;
      导入java.util.HashMap;
      导入java.util.List;
      导入java.util.Map;
      导入javax.print.attribute.HashAttributeSet;
      公共类定位器{
      公共静态void main(字符串[]args){
      整数[]a={3,2,3,0,1};
      Map Map=newhashmap();
      for(int i=0;i”+地图);
      //分类
      列表l=新的ArrayList(Arrays.asList(a));
      集合。排序(l);
      System.out.println(“排序列表-->”+l);
      //获取并打印索引
      列表位置列表=新的ArrayList();
      Map duplicateTrackerMap=新HashMap();
      for(整数键:l){
      int pos=0;
      if(duplicateTrackerMap.get(key)!=null){
      位置=1+重复TrackerMap.get(键);
      }
      重复跟踪器映射放置(键,位置);
      positionList.add(map.get(key.get(pos));
      }
      System.out.println(“排序索引-->”+位置列表);
      }
      }
      
      我可以将原始数组存储在另一个数组中,然后使用循环比较排序后的数组并存储索引

      谢谢@RubioRic@RCInd.

      intx[]={20,40,70,80,50,30};
      
          int x[] = { 20, 40, 70, 80, 50, 30 };
          int[] array = new int[x.length];
          for (int i = 0; i < x.length; i++) {
              array[i] = i;
          }
          for (int i = (x.length - 1); i >= 0; i--) {
              for (int j = 1; j <= i; j++) {
                  int oneMi = j - 1;
                  if (x[oneMi] > x[j]) {
                      int temp = x[oneMi];
                      x[oneMi] = x[j];
                      x[j] = temp;
                      int swi = array[oneMi];
                      array[oneMi] = array[j];
                      array[j] = swi;
                  }
              }
          }
      
          for (int i = 0; i < array.length; i++) {
              System.out.println(array[i]);
          }
      
      int[]数组=新的int[x.length]; 对于(int i=0;i=0;i--){ 对于(int j=1;j x[j]){ int temp=x[oneMi]; x[oneMi]=x[j]; x[j]=温度; int swi=数组[oneMi]; 数组[oneMi]=数组[j]; 数组[j]=swi; } } } for(int i=0;i
      可能的重复在排序之前存储索引,然后在排序之后构建SortedIndex数组怎么样?数组可能的重复可以有重复吗?制作一个索引数组
      {0,1,2,3,4,5}
      。按照您已经排序的方式对其排序,而不是比较
      索引[i]
      索引[j]
      比较
      数字[i]
      数字[j]
      。正如我提到的,我不允许使用map!:(创建阵列的副本,并继续使用mapgreat执行此处所做的操作。您是否可以向上投票它的ans对您有帮助。
          int x[] = { 20, 40, 70, 80, 50, 30 };
          int[] array = new int[x.length];
          for (int i = 0; i < x.length; i++) {
              array[i] = i;
          }
          for (int i = (x.length - 1); i >= 0; i--) {
              for (int j = 1; j <= i; j++) {
                  int oneMi = j - 1;
                  if (x[oneMi] > x[j]) {
                      int temp = x[oneMi];
                      x[oneMi] = x[j];
                      x[j] = temp;
                      int swi = array[oneMi];
                      array[oneMi] = array[j];
                      array[j] = swi;
                  }
              }
          }
      
          for (int i = 0; i < array.length; i++) {
              System.out.println(array[i]);
          }