сортировка двухпутевой вставкой |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
сортировка двухпутевой вставкой |
Гость |
Сообщение
#1
|
Гость |
Мальчики, пожалуйста, дайте код сортировки двухпутевой вставкой. Пожалуйста!!!!Оень нужно!!!!!!!!
|
klem4 |
Сообщение
#2
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Никогда в жизни о такой сортировке не слышал (это конечно не означает что ее не существует), есть просто сортировка вставками, ее реализацию можно найти во многих местах, в том числе и на этом форуме.
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
Сообщение
#3
|
Гость |
Андрей, двухпутевые вставки описаны в 3-ем томе Кнута, раздел 5.2.1
|
Гость |
Сообщение
#4
|
Гость |
Ребята, помогите, ну просто очень нужно!!!
Впервые метод двухпутевых вставок был предложен в начале 50-х годов как метод, позволяющий сократить число необходимых перемещений (по сравнению с простыми вставками). Число пересылок можно сократить примерно в 2 раза до N/8, если допустить сдвиги элементов не только вправо, но и влево. Для выходного файла резервируется место в памяти, равное 2N+1 ,где N – число элементов в исходном файле. Первый элемент пересылается в середину выходного файла. В дальнейшем элементы выходного файла сдвигаются вправо или влево в зависимости от того, в какую сторону нужно сдвигать меньше элементов, то есть туда, где удобнее. Таким образом, удается сократить примерно половину времени работы за счет некоторого усложнения программы. Но этот метод можно применять, используя памяти не больше, чем требуется для N записей № 0 1 2 3 4 5 6 7 8 9 503 087 512 061 908 170 897 275 653 426 Процесс сортировки выглядит следующим образом: Во входном массиве определяем элемент, который больше всего подходит, для помещения его в середину области вывода (№0 503) Определяем количество элементов в выходном массиве, превышающих и не превышающих 503 503 Устанавливаем положение следующего элемента (№1 087) Сравниваем запись №1 с левой границей (087<503) 087 - левая граница в выходном массиве 087 503 Сравниваем запись №2 с правой границей Запись №2 - новая правая граница 0 1 2 3 4 5 6 7 8 9 503 087 512 061 908 170 897 275 653 426 087 503 512 Сравниваем запись №3 с левой границей 61 - левая граница в выходном массиве 061 087 503 512 Сравниваем запись №4 с правой границей Запись №4 - новая правая граница 0 1 2 3 4 5 6 7 8 9 503 087 512 061 908 170 897 275 653 426 061 087 503 512 908 Сравниваем запись №5 с левой границей. Сравниваем запись №5 с правой границей Находим место для записи №5 - позиция 5. Производим сдвиг. 061 087 503 512 908 Сравниваем запись №5 с левой границей. Сравниваем запись №5 с правой границей Находим место для записи №5 - позиция 5. Производим сдвиг. 061 087 503 512 908 Вставляем запись №5 в позицию 5 061 087 170 503 512 908 Дальше продолжаем аналогично И так сортируем до конца ряда. В результате должна получиться последовательность: 061 087 170 275 426 503 512 653 897 908 |
Гость |
Сообщение
#5
|
Гость |
Люди, Отзовитесь!!!! Помогите блондинке!!!! Пожалуйста............
|
Гость |
Сообщение
#6
|
Гость |
Это и есть метод двухпутевой вставки?
[/code] program sort; const n=10; var a: array[1..n] of integer; i,j,t,l: integer; begin randomize; for i:=1 to n do a[i]:=random(11)-5; for i:=1 to n do write(a[i]:4); writeln; while l<>2 do begin l:=l+1; j:=j+1; i:=2-(j mod 2); while i<n-1+(j mod 2) do begin if a[i]>a[i+1] then begin l:=0; t:=a[i]; a[i]:=a[i+1]; a[i+1]:=t; end; inc(i,2); end; end; for i:=1 to n do write(a[i]:4); end.[code=pas] |
Айра |
Сообщение
#7
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Это - метод парных сравнений..
[offtop] Какой знакомый код)) [/offtop] |
Гость |
Сообщение
#8
|
Гость |
Посмотрите, пожалуйста. Я что-то написала, но это не работает, а как по-нормальному сделать...мозгов не хватает
|
Гость |
Сообщение
#9
|
Гость |
Люди добрые! помогите, пожалуйста!!! На днях курсовую сдавать, а кода нет У самой написать никак не получается...
|
Гость |
Сообщение
#10
|
Гость |
Нашла код программы на С.
с помошью наполовину разбирающегося человека перевела на Паскаль. Но не работает программка Помогите, пожалуйста!!!
|
volvo |
Сообщение
#11
|
Гость |
Любой конвертер C->Pas на ура справляется с этой задачей:
function tinsert(var a: array of integer; n: integer): boolean;(P.S. Ты уверена, что это именно двухпутевые вставки?) |
Гость |
Сообщение
#12
|
Гость |
Большое спасибо, ВАМ!!! Да, я думаю это и есть двухутевые вставки. У меня к ВАМ еще один вопрос, а нельзя это как то сделать, исправив то что я навояла. А то я половины операторов не знаю, в том что ВЫ написали. Ужасный программист из меня похоже...
|
Гость |
Сообщение
#13
|
Гость |
Cпасибо всем за помощь!!! Задачка решена
|
Текстовая версия | 10.06.2024 17:22 |