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

Сортировка слиянием MERGE_SORT

04.06.2011, 19:03. Показов 2646. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана последовательность целых чисел. Упорядочить числа по неубыванию, используя рекурсивную сортировку слиянием. Использовать процедуру слияния MERGE.
Вход:
В текстовом файле INPUT.TXT записаны целые числа. Количество чисел не превосходит 15,000 и не записано в файле. Числа по модулю не превосходят 2*109.
Выход:
Записать в текстовый файл OUTPUT.TXT упорядоченную последовательность;
Пример входа:
2 4 5 7 1 2 3 6
Пример выхода:
1 2 2 3 4 5 6 7
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2011, 19:03
Ответы с готовыми решениями:

Сортировка слиянием
Из двух отсортированных в убывающем порядке массивов получить новый массив, отсортированный в том...

Сортировка слиянием
дано два текстовых файла, кажая строка число; 1) 23 4 6 1 56 87 2) 4 56 5 6 7 3 объединить и...

Сортировка слиянием
Написать программу: Сортировки слиянием

Сортировка естественным слиянием
Помогите, а то беда мне:(((( 1.Сортировка естественным слиянием.(желательно с процедурами)...

2
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
04.06.2011, 19:11 2
Лучший ответ Сообщение было отмечено venera-8 как решение

Решение

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
type INTARRAY = array[1..100000] of integer; 
 
procedure gen_array(var A:INTARRAY; N:integer); 
 var i:integer; 
 begin 
 for i:=1 to N do A[i]:=Random(10*N); 
 end; 
 
{copia l'array X in Y} 
procedure copy_array(var X, Y:INTARRAY; n:integer); 
 var i:integer; 
 begin 
 for i := 0 to N do Y[i] := X[i]; 
 end; 
 
function min(a,b:integer):integer; 
 begin if a else min := b; 
 end; 
 
procedure print_array(var A:INTARRAY; N:integer); 
 var i:integer; 
 begin 
 for i:=1 to min(n, 100) do 
 begin 
 write(A[i]:6); 
 if ((i mod 10)= 0) then writeln; 
 end; 
 if (n>100) then writeln('......'); //writeln('array troppo lungo da scrivere'); 
 end; 
 
procedure InsSort(var A: INTARRAY; N: integer); 
var i, j, t, indM: integer; 
begin {Insertion Sort } 
for i := 1 to N-1 do 
 begin 
 indM:=i; 
 for j:=i+1 to N do 
 if A[j] t:= A[i]; 
 A[i]:=A[indM]; 
 A[indM] := t; 
 end; 
 end; 
 
procedure Merge (var A: INTARRAY; p, q, r: integer); 
var i, j, k: integer; 
var B: INTARRAY; 
begin { Merge } 
 i := p; 
 j := q + 1; 
 k := p; 
 while ((i <= q) and (j <= r)) do 
 begin 
 if (A[i] < A[j]) 
 then begin 
 B[k] := A[i]; 
 i := i + 1; 
 end 
 else begin 
 B[k] := A[j]; 
 j := j + 1; 
 end; 
 k := k + 1; 
 end; 
 while (i <= q) do 
 begin 
 B[k] := A[i]; 
 k := k + 1; 
 i := i + 1; 
 end; 
 while (j <= r) do 
 begin 
 B[k] := A[j]; 
 k := k + 1; 
 j := j + 1; 
 end; 
 for k := p to r do A[k] := B[k]; 
end; 
 
procedure MergeSort (var A: INTARRAY; p, r: integer); 
var q: integer; 
begin { MergeSort } 
 if (p < r) then 
 begin 
 q := (p + r) div 2; 
 MergeSort (A, p, q); 
 MergeSort (A, q + 1, r); 
 Merge (A, p, q, r); 
 end; 
 end; 
 
 
var data: INTARRAY; 
var A: INTARRAY; 
var i, j, key:integer; 
 
 
// Programma principale 
var N:integer; 
begin 
write('numero elementi: '); 
readln(N); 
gen_array(data, N); 
 
copy_array(data, A, N); 
 
writeln('array in input: '); 
print_array(data, N); 
writeln('pronto ad ordinare con isertion sort: '); 
readln; 
InsSort(data, N); 
writeln('array dopo ordinamento:'); 
print_array(data, N); 
 
copy_array(A, data, N); 
writeln('pronto ad ordinare con merge sort: '); 
readln; 
MergeSort(data, 1, N); 
writeln('array dopo ordinamento:'); 
print_array(data, N); 
writeln('programma finito'); 
readln; 
end.
файловый ввод-вывод сами припилите. А программа-то на итальянском

Добавлено через 35 секунд
И вообще Сортировки
0
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 27
04.06.2011, 22:42  [ТС] 3
Помогите пожалуйста начать программу. с сортировкой я разберусь,поняла вроде.. там ведь получается надо последовательность на 2 части разбить,а потом пользоваться процедурой,да?
а вот что с этим делать? как записать?
В текстовом файле INPUT.TXT записаны целые числа. Количество чисел не превосходит 15,000 и не записано в файле. Числа по модулю не превосходят 2*109.
надо ли мне обозначать значение чисел по модулю и их количество?
0
04.06.2011, 22:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2011, 22:42
Помогаю со студенческими работами здесь

Доработать программу. Сортировка слиянием
проблема вот в чем: если задать n &lt; 9 все отлично работает а если = &gt; 9 то заменяются нули на...

Сортировка слиянием - исправить код
Помогите, пожалуйста! Я уже очень много раз просила помощь, первые 10 сообщений читают, остальные...

Внешняя сортировка простым слиянием
Реализовать программу, в которой выполняется алгоритм внешней сортировки простым слиянием: Дан...

Реализовать алгоритм Сортировка слиянием
Помогите разобраться!!!!!! program analize_methods; uses dos; const amax=10000; type ar=array ...


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

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