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

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

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

 
 Ответить  Открыть новую тему 
> Проблема с сортировкой
сообщение
Сообщение #1


Пионер
**

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

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


Как реализовать сортировку прямыми вставками??
вот что нашел по этому поводу:
"Сначала выбираем элемент с наименьшим ключом. Затем меняем его местами с первым элементом. Среди оставшихся ищем элемент с наименьшим ключом и меняем его и второй элемент местами. Процесс продолжается, пока не останется один, самый большой элемент.
Сортировку выбором можно использовать, если сложность обмена значительно больше, чем сложность сравнения."


написал программу, но она работает не правильно. Подскажите, где ошибка??В программе обрабатывается матрица.. сортируются строки..
вот процедура:


procedure sort(var matr:matrix;n,m:integer);
var
num,k,min,i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to m do
begin
min:=matr[i,j];
for k:=j to m do
begin
if min>matr[i,k] then begin
min:=matr[i,k];
num:=k;
end;
end;
matr[i,num]:=matr[i,j];
matr[i,j]:=min;
end;
end;
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

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

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


Давай я напишу код просто для одномерного массива, а ты уже потом это применишь к своей матрице. Окей?


procedure sortLine (Var mas: array [1..n] of integer);
Var i, j, { счетчики }
kmin: byte; { номер минимального элемента в массиве }
buf: integer; { перменная обменник }
Begin
for i:=1 to n-1 do
begin
kmin:=i;
for j:=i+1 to n do
if mas[kmin]>mas[j]
then kmin:=j;
buf:=mas[kmin];
mas[kmin]:=mas[i];
mas[i]:=buf;
end;
End;



Просто сравнивая этот и твой код можно вполне реально найти твою ошибку. Ты должен переправить этот код:

 
for j:=1 to m do
begin
num:=j
{ищем номер минимального}
for k:=j+1 to m do
if matr[i, num]>matr[i,k] then num:=k;
{меняем минимальный с текущим}
min:=matr[i,num];
matr[i,min]:=matr[i,j];
matr[i,j]:=min
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 26.10.2020 3:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name