按特定顺序对数组进行排序

Sort the array in a specific order

我需要按特定的“降序”顺序对数组进行排序:在数组的开头或结尾交替插入元素。

如果元素的降序是a>b>c>d,那么最后的数组应该是

[] -> [a,_,_,_] -> [a,_,_,b] -> [a,c,_,b] -> [a,c,d,b]
示例 1

输入:[4、13、8、9、7、1、6]
输出:[13, 8, 6, 1, 4, 7, 9]

示例 2

输入:[16、23、7、11、3、14]
输出:[23, 14, 7, 3, 11, 16]

如何找到解决此问题的方法?

我只尝试对第一个索引进行排序,但我还需要对最后一个索引进行排序。

public static void BubbleSort_First(int[] arr,int first){
        int n = arr.length;
        for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - i - 1; j++)
            if(arr[i]==first){
                if (arr[j] < arr[j + 1]) {
                    // swap arr[j+1] and arr[j]
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
}

也许你可以在数组的排序版本上向后迭代,同时在数组的前面和后面分别保留指向下一个位置的两个指针:

import java.util.Arrays;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int[] a1 = {4, 13, 8, 9, 7, 1, 6};
        System.out.printf("Input1 = %s%n", Arrays.toString(a1));
        System.out.printf("Output1 = %s%n", Arrays.toString(frontBackSorted(a1)));
        System.out.println();
        int[] a2 = {16, 23, 7, 11, 3, 14};
        System.out.printf("Input2 = %s%n", Arrays.toString(a2));
        System.out.printf("Output2 = %s%n", Arrays.toString(frontBackSorted(a2)));
    }

    public static int[] frontBackSorted(int[] array) {
        int[] sortedArray = IntStream.of(array).sorted().toArray();
        int n = array.length;
        int[] result = new int[n];
        int i = 0, j = n - 1, k = n - 1;
        boolean front = true;
        while (i <= j) {
            if (front) {
                result[i++] = sortedArray[k--];
            } else {
                result[j--] = sortedArray[k--];
            }
            front = !front;
        }
        return result;
    }
}

输出:

Input1 = [4, 13, 8, 9, 7, 1, 6]
Output1 = [13, 8, 6, 1, 4, 7, 9]

Input2 = [16, 23, 7, 11, 3, 14]
Output2 = [23, 14, 7, 3, 11, 16]