Java数组降序排列并打印其元素编号

时间:2019-01-17 07:44:40

标签: java arrays sorting

我想做的就是像这样以降序对数组进行排序

Arrays.sort(array);
Collections.reverse(Arrays.asList(array));

然后打印哪个数组元素是第一个,然后是第二个,然后是thrird等。

输入: 10 43 77 23 它们的降序是: 77 43 23 10 我要打印: 3 2 4 1

如果您有任何问题,请随时问我。

提前谢谢!

4 个答案:

答案 0 :(得分:0)

如果我理解正确,您是否要在原始数组中打印元素的索引?首先,您需要复制数组,对副本进行排序,然后在原始数组中找到已排序元素的索引。以下代码可以做到这一点。

int[] x = Arrays.copyOf(array, array.length);
Arrays.sort(x);
Collections.reverse(Arrays.asList(x));

List listObject = Arrays.asList(array)

for(int el : x) {
    System.out.print(listObject.indexOf(el)
}

这是假设数组中的元素是唯一的。如果数组中的元素属于其他类型,则应相应更改xel的类型。

答案 1 :(得分:0)

您可以使用<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form> <div> <label for="test" class="required">required</label> <input type="text" id="test" /> </div> <div> <label class="required">required but no for</label> <input type="text" id="test2" /> </div> <div> <label for="test3" class="">not required</label> <input type="text" id="test3" /> </div> <div> <label for="test4" class="required">required</label> <input type="text" id="test4" /> </div> <div> <input type="button" value="Save" class="js-submit" /> </div> </form>,将元素作为键,将索引作为值。您首先必须使用for循环创建此地图

Map

然后您可以对数组进行排序:

Map<Integer, Integer> indexLookUp = new HashMap<>();
for(int i = 0; i < array.length; i++) {
    map.put(array[i], i);
}

您不需要反转部分,因为您可以向后迭代数组。然后通过地图查找打印出元素的索引:

Arrays.sort(array);

答案 2 :(得分:0)

尝试一下:

int array[] = {17, 10, 8, 13, 5, 7, 8, 30};

// Init the element list
List<Element> elements = new ArrayList<Element>();
for (int i = 0; i < array.length; i++) {
    elements.add(new Element(i, array[i]));
}

// Sort and print
Collections.sort(elements);
Collections.reverse(elements); // If you want reverse order
for (Element element : elements) {
    System.out.println(element.value + " " + element.index);
}

答案 3 :(得分:0)

您可以对索引数组进行排序,而不是对包含实际数据的数组进行排序:

    Integer[] indices = new Integer[array.length];
    for (int i = 0; i < array.length; ++i) {
        indices[i] = i;
    }
    Arrays.sort(indices, (a, b) -> {
        return array[a] < array[b] ? 1 : array[a] > array[b] ? -1 : 0;});