IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Метод Шелла с шагом Хиббарда, для матрицы
Renbo
сообщение 17.12.2006 20:20
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской

Репутация: -  0  +


вот собственно программа которая сортирует строки матрицы методом шелла с шагом N/2:

TYPE mas = array [1..100,1..100] of integer;
VAR
I,N, M, J : Integer;
a:mas;

Procedure Sort( var a : mas; N, M:Integer);
Var
d, i, t : integer;
k : boolean;
begin
d:=N div 2;
while d>0 do
begin
k:=true;
while k do
begin
k:=false;
for I:=1 to M do
for J:=1 to N-d do
begin
if a[I,J] > a[I,J+d] then
begin
t:=a[I,J]; a[I,J]:=a[I,J+d]; a[I,J+d]:=t;
k:=true;
end;
end;
end;
d:=d div 2;
end;
end;

Begin
write ('введите количество строк ');
read (M);
write ('введите количество столбцов ');
read (N);
For I:=1 to M do
For J:=1 to N do
begin
write ('введите a[',I,',',J,']= ');
read (a[I,J]);
end;
Sort(a,N,M);
For I:=1 to M do
For J:=1 to N do
writeln (a[I,J]);
END.






Кстати по идее если почитать литературу, то тут сортировка тоже не совсем корректная в плане шага. Так как мне изменить шаг, чтобы он был как у Хиббарда?

Сообщение отредактировано: Renbo - 17.12.2006 20:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 17.12.2006 22:06
Сообщение #2


Гость






$1 - это 16-ричная запись числа, т.е. та же самая единица, просто как только дело касается битовых операций (shl/shr) я автоматически перехожу на 16-ричную запись - чтоб не ошибиться...

shl - это сдвиг на 1 бит влево, т.е. не деление, а наоборот, умножение на 2 (делается оно до тех пор, пока 2^the_n не будет больше N, потом the_n уменьшается на 1 и высчитывается шаг)

dec - уменьшение на 1
 К началу страницы 
+ Ответить 
Renbo
сообщение 17.12.2006 23:34
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской

Репутация: -  0  +


спасиб огромное good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 14:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"