Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Замудренная рекурсия - прошу подсказки.

29K
26 апреля 2011 года
webdev
56 / / 08.05.2010
Здравств.
У нас то-ли препод оч хитрий, то ли ХЗ. :) А то что-то как придумает.
Задача вроде бы проста, но уже несколько часов сижу и думаю как бы это сделать.
Фишка вот в чем. Нужно написать рекурсивный и итеративный MergeSort, - в интернете и книгах полно исходников. Но он дал вот такую схему.

 
Код:
public static void sort_iterativ(int[] a)
public static int[] sort_rekursiv(int[] a)


Так вот что я намудрил:
Код:
public static int[] sort_rekursiv(int[] a) {

        //int[] result = new int[a.length];
        int m = (a.length + 1) / 2;
        int[] left = new int[(a.length + 1) / 2];
        int[] right = new int[a.length - m];
       
        if (a.length <= 1) {
            return a;
        } else {
           
            for (int i = 0; i < left.length; ++i) {
                left = a;
                IO.println("left [" + i + "] = " + left);
            }
            sort_rekursiv(left);
           
           
            for (int i = 0; i < right.length; ++i) {
                right = a[i + m];
                IO.println("right [" + i + "] = " + right);
            }
           
            sort_rekursiv(right);
        }

        return merge(left,right);
    }


первую часть последовательности разбивает правильно - например (32 2 256 8 512 4) - у меня еще спец условие для ввода, заходят только (2^n элементы). Это не важно.
Тоисть 32,2,256 - делит на 2 и так д...
а вот как делить вторую последовательность? после рекурсии right всегда изменяется. Никаких глобальных переменных нельзя, все должно функционировать в пределах этой функции.

Спасибо за подсказки.
2.1K
26 апреля 2011 года
Norgat
452 / / 12.08.2009
Для рекурсивного варианта возьми QuickSort скажем отсюда: http://www.javenue.info/post/45

и передавай в функцию рекурсивно не диапазон сортируемых элементов, а куски массива исходного. Возвращаемые массивы склеивай.
29K
26 апреля 2011 года
webdev
56 / / 08.05.2010
Дык, нужно именно MergeSort - задание такое.
29K
27 апреля 2011 года
webdev
56 / / 08.05.2010
решено
left = sort_rekursiv(left);
right = sort_rekursiv(right);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог