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

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

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

> Сортировки, Помогите пожалуйста написать сортировки
сообщение
Сообщение #1





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

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


Ребят у меня такая проблема нам учитель задал написать 3 сортировки, дал книгу(которую я почитал) но реализацию не объяснил (да собственно говоря он никогда ничего не объяснял толком). У меня трудности заключаются в написании самих сортировок. Помогите Please написать сортировки(Пирамидальная сортировка, Быстрая сортировка, Сортировка за линейное время ).
Я написал массив и его генерацию.
Код
const
N = 10;
type
arr = array [0..N - 1] of integer;

var
a: arr;
///Генерирование массива
function rand: arr;
var
i: integer;
begin
randomize;
for i := 0 to (N - 1) do result[i] := random(100);
end;
///Вывод массива
procedure print(a: arr);
var
i: integer;
begin
for i := 0 to (N - 1) do write(a[i], ' ');
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2





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

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


Спасибо поиск оказался полезным узнал много нового но и появились 2 проблемы. Вот например есть у меня сортировка простым выбором
Код

const
  N = 10;

type
  arr = array [0..N - 1] of integer;

var
  a: arr;
///Генерирование массива
function rand: arr;
var
  i: integer;
begin
  randomize;
  for i := 0 to (N - 1) do result[i] := random(100);
end;
///Вывод массива
procedure print(a: arr);
var
  i: integer;
begin
  for i := 0 to (N - 1) do write(a[i], ' ');
end;
/// сортировка массива
procedure sorting (a: arr);
    var
      min, i, k, j: integer;
    begin
    for i := 0 to N - 1 do
  begin
    min := a[i];
    k := i;
    for j := i + 1 to N - 1 do
      if a[j] < min then
      begin
        k := j;
        min := a[j];
      end;
    a[k] := a[i];
    a[i] := min;
    writeln;
    print(a);
  end;
    end;

begin
  a := rand;
  print(a);
  sorting(a);
end.

И когда её запускаешь то она пишет в решении массив и сортировку этого массива.
Например
83 30 13 85 8 58 0 30 64 36
0 30 13 85 8 58 83 30 64 36
0 8 13 85 30 58 83 30 64 36
0 8 13 85 30 58 83 30 64 36
0 8 13 30 85 58 83 30 64 36
0 8 13 30 30 58 83 85 64 36
0 8 13 30 30 36 83 85 64 58
0 8 13 30 30 36 58 85 64 83
0 8 13 30 30 36 58 64 85 83
0 8 13 30 30 36 58 64 83 85
0 8 13 30 30 36 58 64 83 85
И вот я написал точнее скопировал и подредактировал две сортировки
Пирамидальная сортировка
Код
const
  N = 10;

type
  arr = Array[0 .. N-1] Of Integer;

var
  a: arr;
///Генерирование массива
function rand: arr;
var
  i: integer;
begin
  randomize;
  for i := 0 to (N - 1) do result[i] := random(100);
end;
///Вывод массива
procedure print(a: arr);
var
  i: integer;
begin
  for i := 0 to (N - 1) do write(a[i], ' ');
end;
/// сортировка массива
Procedure HeapSort(Var ar: arr; n: Integer);
Var
   Left, Right: integer;
  x: Integer;

  Procedure sift;
  Var i, j: Integer;
  Begin
    i := Left; j := 2*i; x := ar[i];
    While j <= Right Do Begin
      If j < Right Then
        If ar[j] < ar[Succ(j)] Then Inc(j);

      If x >= ar[j] Then Break;
      ar[i] := ar[j];
      i := j; j := 2 * i
    End;

    ar[i] := x
  End;

Var T: Integer;
Begin
  Left := Succ(n div 2); Right := n;
  While Left > 1 Do Begin
    Dec(Left); sift
  End;

  While Right > 1 Do Begin
    T := ar[ Left ]; ar[ Left ] := ar[ Right ]; ar[ Right ] := T;
    Dec(Right); sift
end
End;


begin
  a := rand;
  print(a);
  
end.

Быстрая сортировка
Код
const
  N = 10;
  
Type
  arr = Array[0 .. N-1] Of Integer;
  
  var
  a: arr;
///Генерирование массива
function rand: arr;
var
  i: integer;
begin
  randomize;
  for i := 0 to (N - 1) do result[i] := random(100);
end;
///Вывод массива
procedure print(a: arr);
var
  i: integer;
begin
  for i := 0 to (N - 1) do write(a[i], ' ');
end;
/// сортировка массива

Procedure merge(Var ar: arr; n: Integer);

  Procedure Slit( k, q: Integer );
  Var
    m: Integer;
    i, j, T: Integer;
    d: arr;
  Begin
    m := k + (q-k) div 2;
    i := k; j := Succ(m); t := 1;
    While (i <= m) and (j <= q) Do Begin
      If ar[i] <= ar[j] Then Begin
        d[T] := ar[i]; Inc(i)
      End
      Else Begin
        d[T] := ar[j]; Inc(j)
      End;
      Inc(T)
    End;

    While i <= m Do Begin
      d[T] := ar[i]; Inc(i); Inc(T)
    End;
    While j <= q Do Begin
      d[T] := ar[j]; Inc(j); Inc(T)
    End;

    For i := 1 to Pred(T) Do
      ar[Pred(k+i)] := d[i]
  End;

  Procedure Sort(i, j: Integer);

  Begin
    If i >= j Then End;
    var j,i,T:integer;
   Begin
    If j-i = 1 Then Begin
      If ar[j] < ar[i] Then Begin
        T := ar[i]; ar[i] := ar[j]; ar[j] := T
      End
    End
    Else Begin
      Sort(i, i + (j-i) div 2);
      Sort(i + (j-i) div 2 + 1, j);
      Slit(i, j)
    End;
  End;

begin
  a := rand;
  print(a);
  
end.


Но не одна из этих сортировок не сортирует массивы. Помогите найти ошибочки.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





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