Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
-12 / 3 / 0
Регистрация: 02.04.2012
Сообщений: 347
1

Мой личный Merge или много неработающего кода

27.05.2012, 21:44. Показов 496. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Люди, здравствуйте.
Мне надо написать рекурсивную сортировку. Естественно, что круто - это когда сортирует за логарифмическое время, как, например, Мердж.
Я написал, так принцип понимаю. Но вот несчастье - оно не работает.
Состоит сортировка из двух процедур: merge - сливает два массива в один по принципу "наименьший из двух вперед", и merge_sort - рекурсия.
Сам мердж работает - я запускал его отдельно. А вот, запуская вместе с мердж_сорт, я получаю оверфлоу - стек переполнен, однако.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
procedure merge(var ar,tmp:arr; left,middle,right:integer);
    var
        i_r,i_l,cnt,i:integer;
    begin
        cnt:=left;
        i_l:=left;
        i_r:=middle+1;
        while (cnt<=right) do
        begin
            if (i_l>middle) then    
            begin
                tmp[cnt]:=ar[i_r];
                i_r:=i_r+1;
                cnt:=cnt+1;
            end;
            if (i_r>right) then
            begin
                tmp[cnt]:=ar[i_l];
                i_l:=i_l+1;
                cnt:=cnt+1;
            end;
            if (i_l<=middle) and (i_r<=right) then
            begin
                if ar[i_l]<ar[i_r] then
                begin
                    tmp[cnt]:=ar[i_l];
                    i_l:=i_l+1;
                    cnt:=cnt+1;
                end
                else
                begin
                    tmp[cnt]:=ar[i_r];
                    i_r:=i_r+1;
                    cnt:=cnt+1;
                end;
            end;
        end;
        for i:=left to right do
            ar[i]:=tmp[i];
    end;    
procedure merge_sort(var ar,tmp:arr; left,right:integer);
    var
        middle:integer;
    begin
        if left<right then
        begin
            middle:=(left+right) div 2;
            merge_sort(ar,tmp,left,middle);
            merge_sort(ar,tmp,middle,right);
            merge(ar,tmp,left,middle,right);
        end;
    end;
И как это победить?
PS: где тут спойлеры?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2012, 21:44
Ответы с готовыми решениями:

Определить причину неработающего кода
Добрый день! Тема касается Автоматизированной системы управления оборудованием. (по импортному...

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

Кроссбраузерность обработки кода или почему мой код работает только в Chrome ?
Доброго времени суток! есть у меня вот такой вот код &lt;!DOCTYPE HTML&gt; &lt;html&gt; &lt;head&gt; ...

Генератор всей информации на много Yetabayte или много битный счетчик или ЗУ с неограниченным размером
Вопрос как получить всю информацию все изображения и.т.д ? Ответ прост весь код файла это номер...

0
27.05.2012, 21:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.05.2012, 21:44
Помогаю со студенческими работами здесь

Что лучше: 1 цикл и много действий или много циклов и 1 действие?
Есть n количество данных. Есть m количество действий. Задание надо выполнить m действий с каждой...

Много методов или много классов. Что лучше?
Имеется библиотека(ActiveX DLL), в которую, в своё время, было решено складировать функции,...

Что лучше - много строк или много колонок?
Не могу определиться как лучше хранить сводную таблицу. Задача такая: Есть таблица накопления...

слишком много аргументов в вызове функции или как создать много файлов на рабочем столе
Мне нужно создать на рабочем столе очень много файлов вот команда для создания 1 файла wchar_t...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru