Помощь - Поиск - Пользователи - Календарь
Полная версия: Методы сортировки.....
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
perez
Народ, помогите, лаба висит на носу.... Как выглядит сортировка методом просеивания....напишите плиз....можно использовать только ее
volvo
perez
Насколько мне известно,
Цитата
сортировка методом просеивания
это другое название "Сортировки простыми вставками". Описание - в ФАКе

Цитата
поскольку элемент R, как бы "проникает" на положенный ему уровень, этот способ часто называют "просеиванием", или "погружением".
perez
Точно?)
volvo
perez
Прочитай вот это... :yes:
perez
Маленькая проблемка, мне для столбцов двумерной матрицы, че где нуно переделать?)
Amro
В пирамидальной сортировке тоже что-то говорится о просеивании ... так что может быть и она ...
volvo
perez
То есть тебе надо сортировать каждый столбец в отдельности? Или что?
volvo
Amro
А по линку ходил (который я дал) ?
Amro
volvo
Пардон, не ходил, :yessss: однако там говорится что так называется способ, но как я понял не метод, а способ может присутствовать в разных методах smile.gif смотря что понимается в данном случае под просеиванием ....
perez
Да, каждый столбец нужно отсортировать.
perez
Народ, этот способ в факу н пашет..........прога выдает отсортированный массив со 2сэлемента, а первый эелемент меняет на ХРЕНЬ КАКУЮ ТУ)
volvo
perez
Это то, что нужно по условию задачи:
Код
const
 n = 4;
 m = 4;
type
 matrix = Array[1 .. n, 1 .. m] Of Integer;


Procedure Insert(Var ar: matrix; currCol: Integer; n: Integer);
Var i, j, T: Integer;
Begin
  For i := 1 To n do
    Begin
      T := ar[i, currcol];
      j := Pred(i);
      While (T < ar[j, currcol]) and (j >= 0) Do
        Begin
          ar[Succ(j), currcol] := ar[j, currcol]; Dec(j);
        End;
      ar[Succ(j), currcol] := T;
    End;
End;

const
 a: matrix =
   ((10,  9,  8,  7),
    ( 6,  5,  4,  3),
    (11, 12, 14, 16),
    (34, 23, 81, 11));
var
 i, j: integer;
begin
 For i := 1 to m do
   Insert(a, i, n);
 for i := 1 to n do
   begin
     for j := 1 to m do
       write(a[i, j]:5);
     writeln
   end;
end.


Цитата
Народ, этот способ в факу н пашет..........прога выдает отсортированный массив со 2сэлемента, а первый эелемент меняет на ХРЕНЬ КАКУЮ ТУ)

Программу можно посмотреть, в которой это произошло? И впредь воздерживайтесь от таких высказываний, т.к. ВСЕ методы сортировки проверены мной лично на примерно 25 тестах...
Altair
volvo, имхо у него индексация с нуля начинается..
smile.gif
perez
Вот майн прога, че в ней не правильно?
Код
program pr5;
uses crt;
type
ta = Array[1 .. 100,1..100] Of Integer;
Var i,n,j,m: Integer;
a : TA;
procedure p5(var a: ta; n,m: integer);
var
i,j,t,l : integer;
begin
for j:=1 to m do
  For i := 2 To n do
    Begin
      T := a[i,j];
      l := Pred(i);
      While (T < a[l,j]) and (l >= 0) Do
        Begin
          a[Succ(l),j] := a[l,j];
           Dec(l,j);
        End;
      a[Succ(l),j] := T;
    End;
    end;
begin
writeln('vvedite n');
read(n,m);
writeln('vvedite e-ti massiva');
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
p5(a,n,m);
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:5);
writeln;
end;
readkey;
end.
perez
Что то я не понял программу вольво если честно) Что такое currCol/?
volvo
perez
1. В твоей программе -
Код

While (T < a[l,j]) and (l >= 0) Do
 Begin
   a[Succ(l),j] := a[l,j];
   Dec(l,j); { почему так? Должно быть просто Dec(l); }
End;


2. В моей программе: тебе же надо сортировать столбцы по отдельности, вот я и передаю в процедуру сортировки таблицу, и тот столбец, который надо сортировать на этом проходе. (CurrCol - Current Column - текущий столбец.)
perez
СПАСИБО VOLVO. ВСЕ РАБОТАЕТ) :thanks:
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.