![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Юлия |
![]()
Сообщение
#1
|
Гость ![]() |
Люди!!! Очень нужен исходник!!!
Почему-то по просто двухпутевому слиянию - материала море, а про "естественное" - ни слова. ХЕЛП!!! |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
По аналогии и не получится...
![]() Исходный код const arr_size = 50; type ttype = integer; tvector = array[0 .. pred(arr_size)] of ttype; var B: tvector; procedure merge(var A : array of ttype; p, q, r : longint); var k, i, j : longint; begin for k := 0 to r - p do B[k] := A[k+p]; i := 0; j := q-p+1; for k := 0 to r - p do begin if (i > q-p) or (j > r-p) then begin if i > q-p then begin A[p+k] := B[j]; inc(j); end else begin A[p+k] := B[i]; inc(i); end; continue; end; if B[i] > B[j] then begin A[p+k] := B[j]; Inc(j); end else begin A[p+k] := B[i]; Inc(i); end; end; end; procedure merge_sort(var arr: array of ttype; p, r: longint); var q: longint; begin 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; procedure create_vector(var vec: array of ttype; n: integer); var i: integer; begin for i := 0 to pred(n) do vec[i] := random(100); end; procedure print_vector(var vec: array of ttype; n: integer); var i: integer; begin for i := 0 to pred(n) do write(vec[i]:5); end; var arr: tvector; begin writeln; writeln('before:'); create_vector(arr, arr_size); print_vector(arr, arr_size); writeln; writeln('after:'); merge_sort(arr, 0, pred(arr_size)); print_vector(arr, arr_size); end. Попробуй преобразовать это в процедуру, и сделать то, что тебе нужно... P.S. Я бы немного изменил твою программу. Ты производишь однотипные действия неоднократно. Имеет смысл в таком случае вынести их в функцию. Смотри: Function GetSeconds: Real; А из самой InsertSort все, что связано с вычислением времени - убрать... Во-первых, программа станет проще для понимания. Во-вторых - процедура сортировки не перегружается лишними вычислениями, а делает ТОЛЬКО то, что должна делать. В третьих, эту же функцию GetSeconds можно применять и при определении быстродействия других методов сортировки... Подумай над этим ;) |
Jill |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Цитата(volvo @ 16.09.05 16:11) Подумай над этим ;) кст, думала ;) там действительно много повторов так все несложно получается...не то, что с теми внешними файлами...здорово! ![]() ПАСИБА!!! :zdorov: |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 2:21 |