如何在保留初始索引的同时对这些值进行排序?

时间:2012-09-18 18:52:30

标签: java c++ c arrays sorting

我想在剧院里安排一群4人,这样他们可以坐在一起,或者让大多数人彼此相邻。我有一个行数组,其中索引表示存储该行中可用席位数的行。如果我使用了排序方法,那么它将对可用的座位进行排序,但是我将丢失它对应的哪一行。显然我可以循环查找我想要的最大座位数量,如果我没有找到,我可以减少我的数量等等,但这不是最佳的。

行:1 2 3 4

可用:2 3 1 4

已分类可用:4 3 2 1

对应行:4 2 1 3< - 这就是我想要的

//this is one way to do it but i want a better way
int[] row = {0, 2, 3, 1, 4};
double[] rowDouble = new double[row.length];

for (int i = 0; i < row.length; i++)
{
    String rowString = Integer.toString(row[i]) + "." + Integer.toString(i);
    rowDouble[i] = Double.valueOf(rowString);
}

Arrays.sort(rowDouble);
String sortedRowString = Arrays.toString(rowDouble);
sortedRowString = sortedRowString.substring(1, sortedRowString.length()-1);

System.out.println(sortedRowString);
String[] finalSortedRowString = sortedRowString.split(", ");

for (int i = finalSortedRowString.length-1; i > 0; i--)
{
    System.out.println(finalSortedRowString[i].split("\\.")[1]);
}

1 个答案:

答案 0 :(得分:6)

我认为你是以错误的范式来实现这一目标的。 Java是一种面向对象的语言,你应该这样使用它。

public Class Row {
    private int available;
    private int rownum;
    public Row(int avail, int rown) { /*...*/ }
    public int compareTo(Row otherRow) { /*...*/ }
    public int checkAvailable() { /*...*/ }
    public int addPerson() { /*...*/ }
    public int addSeat() { /*...*/ }
    public int addParty(int size) { /*...*/ }
}

然后,您可以使用许多可用的Java集合中的一个来保存和排序它们。这是一些额外的编码,但它将允许更强大和可扩展的实现。例如:如果你的行有两个座位可用,但它们在两端?您当前的实施必须完全清除。在这里,你只需要在几个地方改变逻辑,而BAM,你有v2。

请强烈​​考虑使用这种语言。不要使用java作为脚本语言,这不是它的用途。