当前位置: 首页 > 面试题库 >

如何在Java中对数组进行排序并跟踪索引

苏嘉歆
2023-03-14
问题内容

我正在尝试排序(减少)整数数组,但要跟踪原始索引。

我的意思是,例如,如果我有这个数组:

b[] = { 4, 5, 3, 5, 2 }

使用Arrays.sort(b,Collections.reverseOrder())之后变成(我使用Arrays.sort,因为在此示例中b的长度仅为5,但是在我的问题中b的长度可能是1
<b.length <70

b[] = { 5, 5, 4, 3, 2 }

但我想以某种方式拥有原始索引,我的意思是知道

bOrignalIndex[] = { 1, 3, 0, 2, 4 }

我不知道我的问题是否明确,请向我询问一切。我在C ++中有这段代码可能会有所帮助,因为它可以满足我的要求

n=4
m=5
tord[] =  
[0] 0   
[1] 1   
[2] 2   
[3] 3   
ts[] =      
[0] 4   
[1] 5   
[2] 3   
[3] 5



   tord[MAXT], ts[MAXT];
       bool ord(int a, int b){
        return ts[a] > ts[b];    }
    int main(void){
        for(int m, n; scanf("%d %d", &m, &n)){
            bool possible = true;
            FOR(i=0;i<m, i++){ // for each team
                scanf("%d", ts + i); // read team size
                tord[i] = i;
            }
            sort(tord, tord + m, ord)

这样做之后,问题是tord将数组按索引排序,即:

tord[] =  
[0] 1   
[1] 3   
[2] 0   
[3] 2

问题答案:

尝试对(value, index)按值比较的对进行排序:

public class Pair implements Comparable<Pair> {
    public final int index;
    public final int value;

    public Pair(int index, int value) {
        this.index = index;
        this.value = value;
    }

    @Override
    public int compareTo(Pair other) {
        //multiplied to -1 as the author need descending sort order
        return -1 * Integer.valueOf(this.value).compareTo(other.value);
    }
}

然后,当您要排序时:

public static void main(String[] args) {
    Pair[] yourArray = new Pair[10];

    //fill the array
    yourArray[0] = new Pair(0, 5); yourArray[1] = new Pair(1, 10); //and so on
    Arrays.sort(yourArray);
}

现在,您具有Pairvalue降序排列的对象数组。每个对象还包含index-原始数组中的位置。

PS:我用Java编写了示例,因为问题带有java标签。尽管在C++思想上是相同的,但是只有实现有所不同。



 类似资料:
  • 问题内容: 我有一个JTable的第一行为空白。现在,当我通过单击列对表进行排序时,空白行位于底部。如果我在空白行中插入内容并进行排序,则该行将相应放置。即使已排序,如何跟踪其行索引。我需要访问该行,但是如果用户进行排序,那么我将失去行索引,因为它不再是第一行。 问题答案: 您所使用的假设Java 6中新增的东西,我认为你需要看看是什么方法和在类。你会做类似的事情 从模型中找出哪个可见行索引实际上

  • 问题内容: 我的数组不包含任何字符串。但是它包含对象引用。每个对象引用都通过toString方法返回名称,id,作者和发布者。 现在,我需要按名称对对象数组进行排序。我知道如何排序,但是我不知道如何从对象中提取名称并对它们进行排序。 问题答案: 你有两种方法可以使用Arrays实用程序类 实现一个Comparator并将数组与比较器一起传递给sort方法,该方法将其作为第二个参数。 在对象所属的类

  • 我有一个JSON数组: 结果为“数据”: 我怎么能有一个升序按“datesurder”? THX

  • 因此,我试图学习如何为类项目排序数组。我想知道如何对一个数组进行排序,从而对另一个数组进行排序。在下面的代码中,我可以对年份数组进行排序,但我如何才能使更改这一数组将名称和艺术家数组都更改为它们排列的数组呢?此外,如果你有任何建议,让代码对眼睛不那么苛刻,请告诉我,我正在努力掌握这个概念。

  • 正如我的问题所描述的,如何在java中对类型数组的列表进行排序? 这是我的ListClass 这是我的驾驶程序 现在,我希望在ListClass中有一个通用排序方法,可以对通过驱动程序生成的任何类型的列表(字符串、整数、双精度、浮点等)进行排序。

  • 我在下面有下面的Java代码,我正在尝试将其转换为Swift。如果有人能在这个问题上帮助我,我将非常感激。 谢谢