Вторник, 17.06.2025, 01:03
Приветствую Вас Гость | RSS
Меню сайта
Категории раздела
Примеры сортировок [3]
Сортировка вставками, Сортировка вставками с ограничителем, Сортировка выбором без запоминания минимума, Сортировка выбором, Сортировка "пузырьком", Сортировка "шейкером", Сортировка "пузырьком" с остановкой, Сортировка Шелла, рекурсивная сортировка слиянием, Рекурсивная процедура быстрой сортировки, Рекурсивная процедура быстрой сортировки с выбором медианы, Сортировка при помощи кучи, Сортировка при помощи кучи, Цифровая сортировка для 8-разрядных цифр, Сортировка вычерпыванием по 256 частям и т.д....
Наш опрос
Оцените мой сайт
Всего ответов: 135
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Сортировки массивов на паскале » Примеры сортировок

Пример реализации сортировки массива слиянием по алгоритму фон Неймана(нерекурсивный вариант).
uses crt;
type mas=array[0..100] of integer;
procedure MergeSort(var m:mas;n:integer);
var
c:boolean;
i,i1,i2,n1,n2,j,k,tmp,len:integer;
b:mas;
begin
len:=1;
c:=true;
while len<n do
 begin
  if c then
  begin
  i:=0;
  while i+len<=n do
  begin
  i1:=i+1;
  i2:=i+len+1;
  n1:=i+len;
  n2:=i+2*len;
  if n2>n then
  begin
  n2:=n;
  end;
  while(i1<=n1)or(i2<=n2)do
  begin
  if i1>n1 then
  begin
  while i2<=n2 do
  begin
  i:=i+1;
  b[i-1]:=m[i2-1];
  i2:=i2+1;
  end;
  end
  else
  begin
  if i2>n2 then
  begin
  while i1<=n1 do
  begin
  i:=i+1;
  b[i-1]:=m[i1-1];
  i1:=i1+1;
  end;
  end
  else
  begin
  if m[i1-1]>m[i2-1] then
  begin
  i:=i+1;
  b[i-1]:=m[i2-1];
  i2:=i2+1;
  end
  else
  begin
  i:=i+1;
  b[i-1]:=m[i1-1];
  i1:=i1+1;
  end;
  end;
  end;
  end;
  end;
  i:=i+1;
  while i<=n do
  begin
  b[i-1]:=m[i-1];
  i:=i+1;
  end;
  end
  else
  begin
  i:=0;
  while i+len<=n do
  begin
  i1:=i+1;
  i2:=i+len+1;
  n1:=i+len;
  n2:=i+2*len;
  if n2>n then
  begin
  n2:=n;
  end;
  while (i1<=n1)or(i2<=n2)do
  begin
  if i1>n1 then
  begin
  while i2<=n2 do
  begin
  i:=i+1;
  m[i-1]:=b[i2-1];
  i2:=i2+1;
  end;
  end
  else
  begin
  if i2>n2 then
  begin
  while i1<=n1 do
  begin
  i:=i+1;
  m[i-1]:=b[i1-1];
  i1:=i1+1;
  end;
  end
  else
  begin
  if b[i1-1]>b[i2-1] then
  begin
  i:=i+1;
  m[i-1]:=b[i2-1];
  i2:=i2+1;
  end
  else
  begin
  i:=i+1;
  m[i-1]:=b[i1-1];
  i1:=i1+1;
  end;
  end;
  end;
  end;
  end;
  i:=i+1;
  while i<=n do
  begin
  m[i-1]:=b[i-1];
  i:=i+1;
  end;
  end;
  len:=2*len;
  c:= not c;
  end;
 if not c then
  begin
  i:=1;
  repeat
  m[i-1]:=b[i-1];
  i:=i+1;
  until not(i<=n);
  end;
end;
var a:mas;
  n,i:integer;
begin
clrscr;
randomize;
write('n=');readln(n);
writeln('Исходный массив:');
for i:=0 to n-1 do
 begin
  a[i]:=random(20);
  write(a[i],' ');
 end;
writeln;
MergeSort(a,n);
writeln('Сортировка:');
for i:=0 to n-1 do
write(a[i],' ');
readln
end.
 

Категория: Примеры сортировок | Добавил: Student (29.07.2009)
Просмотров: 3581 | Рейтинг: 1.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
  • Курсовая работа
  • www.des.h19.ru - портал для вас и Вашего ПК



    Rambler's Top100 WOlist.ru - каталог качественных сайтов Рунета