Помощь - Поиск - Пользователи - Календарь
Полная версия: Проблема с сортировкой
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
priboltik
Как реализовать сортировку прямыми вставками??
вот что нашел по этому поводу:
"Сначала выбираем элемент с наименьшим ключом. Затем меняем его местами с первым элементом. Среди оставшихся ищем элемент с наименьшим ключом и меняем его и второй элемент местами. Процесс продолжается, пока не останется один, самый большой элемент.
Сортировку выбором можно использовать, если сложность обмена значительно больше, чем сложность сравнения."


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


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;
КМА
Давай я напишу код просто для одномерного массива, а ты уже потом это применишь к своей матрице. Окей?


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;

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.