Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2019, 09:29   #1
SergejBrovkin
Новичок
Джуниор
 
Регистрация: 11.01.2019
Сообщений: 1
По умолчанию Пирамидальная сортировка на Java

Может кто-нибудь подсказать, как сделать приведение к виду "кучи" без рекурсии?

Код:
package com.company;

public class PyramidalSorting {
    public static void leadToMindHeap(int[] a, int i, int endIndex) {
        int childIndex1 = 2 * i + 1;
        int childIndex2;

        if (childIndex1 < a.length - 1) {
            childIndex2 = childIndex1 + 1;
        } else {
            childIndex2 = childIndex1;
        }

        int child1 = a[childIndex1];
        int child2 = a[childIndex2];

        int maxChild = (child1 > child2) ? child1 : child2;
        int index = (child1 > child2) ? (childIndex1) : (childIndex2);

        if (maxChild > a[i] && index < endIndex) {
            int temp = a[i];
            a[i] = maxChild;
            a[index] = temp;

            if (index <= (a.length / 2) - 1) {
                leadToMindHeap(a, index, endIndex);
            }
        }
    }

    public static void pyramidalSorting(int[] array) {
        int length = array.length;

        int middleIndex = (array.length / 2) - 1;

        for (int i = middleIndex; i >= 0; i--) {
            leadToMindHeap(array, i, length);
        }

        int endIndex = array.length - 1;

        while (endIndex >= 0) {
            int temp = array[0];
            array[0] = array[endIndex];
            array[endIndex] = temp;

            int middle;

            if (endIndex == 1) {
                if (array[0] > array[endIndex]) {
                    temp = array[0];
                    array[0] = array[endIndex];
                    array[endIndex] = temp;
                    return;
                }
            }

            if (endIndex > 3) {
                middle = endIndex / 2 - 1;
            } else {
                middle = endIndex / 2;
            }


            for (int i = 0; i < middle; i++) {
                leadToMindHeap(array, i, endIndex);
            }

            endIndex--;
        }
    }

    public static void main(String[] args) {
        int[] array = {33, 1, 67, 5, 29, 0, 298, 1, 66, 3, 66, 5};

        pyramidalSorting(array);

        for (int element : array) {
            System.out.println(element);
        }
    }
}
SergejBrovkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пирамидальная сортировка doctorvra4 Помощь студентам 1 15.12.2011 11:04
Пирамидальная сортировка ilushka2306 Общие вопросы Delphi 1 16.05.2011 00:26
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
Пирамидальная сортировка nunj39 Общие вопросы C/C++ 0 21.06.2010 18:07
Пирамидальная сортировка QuadroX Фриланс 7 26.05.2010 20:16