Отсортировать массив в определенном порядке

Мне нужно отсортировать массив в определенном «убывающем» порядке: когда элементы вставляются поочередно в начале или в конце массива.

Если порядок элементов в порядке убывания 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;
                }
            }
}

Что такое first в коде? Укажите минимальный воспроизводимый пример. Непонятно, почему этот конкретный желаемый результат в ваших примерах является правильным выводом для вашей проблемы.

kcsquared 23.04.2022 02:28

Я второй @kcsquared здесь, я не верю, что порядок убывания с Пример 1 Ввод: [4, 13, 8, 9, 7, 1, 6] даст Вывод: [13, 8, 6, 1, 4, 7, 9]

Kemper Lee 23.04.2022 02:36
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
2
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, вы могли бы просто выполнить итерацию назад по отсортированной версии массива, сохраняя при этом два указателя на следующую позицию в начале и в конце массива соответственно:

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]

Другие вопросы по теме