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

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

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

> Сортировки, Помогите пожалуйста написать сортировки
Anatolik174
сообщение 14.12.2010 11:53
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Anatolik174
сообщение 14.12.2010 13:24
Сообщение #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 
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 19.07.2025 23:34
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"