пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Язык программирования Pascal. Составные типы данных. Массивы. Сортировка массивов. Сортировка двоичным деревом, пирамидальная сортировка (основная идея, пример реализации).

 

Паскаль (Pascal) разрабатывался, как учебный язык выского уровня, структурного программирования. Относится к 3-му поколению языков программирования.  На основе ALGOL.

 

Составные типы данных – типы данных базирующиеся на простых. Важна однотипность элементов и способ доступа, позволяющие выделить главные представители сложных типов.

 

 

Массив - набор однотип переменных, каждому эл-ту которого присвоен некот поряд номер, что обеспечивает простоту доступа к каждому эл-ту.

Массивы могут быть одномерными и многомерными

Описание при помощи слова array в разделе описания типов

Алгоритм сортировки - алгоритм упорядочения элементов в списке

Сортировка массива - процесс перестановки его элементов в опред порядке

Основ требов к методам сортировки - экономия использования памяти

Сортировка двоичным деревом: левый преемник всегда <, а правый всегда > или = предшественнику (сложность O(n log n)), требуется О(n) доп памяти)

При добавлении элемента сравниваем его последовательно с нижестоящими узлами

type

TType = integer;

arrType = array[1 .. n] of TType;

const a: arrType = (44, 55, 12, 42, 94, 18, 6, 67);

type PTTree = ^TTree;

TTree = record

  a: TType;

  left, right: PTTree; end;

procedure SortTree(var a: arrType; n: integer);

var root: PTTree; i: integer;

begin

root := nil;

for i := 1 to n do

  root := AddToTree(root, a[i]); // добавление в дерево

TreeToArray(root, a) // заполнение массива

end;

procedure TreeToArray(root: PTTree; var a: arrType);

const maxTwo: integer = 1;

begin

 if root = nil then exit;

TreeToArray(root^.left, a); (* Левое поддерево *)

a[maxTwo] := root^.a; Inc(maxTwo);

TreeToArray(root^.right, a);  (* Правое поддерево *)

Dispose(root); end;

function AddToTree(root: PTTree; nValue: TType): PTTree;

begin

if root = nil then begin  (* При отсутствии преемника создать новый элемент *)

  root := new(PTTree);

  root^.a := nValue;

  root^.left := nil;

  root^.right := nil;

  AddToTree := root; exit; end;

if root^.a < nValue then

  root^.right := AddToTree(root^.right, nValue) else

  root^.left := AddToTree(root^.left, nValue);

AddToTree := root; end;

Пирамидальная сортировка (слож-ть О(n log n)) превращаем список в кучу, берем наиб и добавляем в конец

Прога:Type arrType = Array[1 .. n] Of Integer;

Procedure HeapSort(Var ar: arrType; n: Integer);

Var i, 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);//succ- возврат след. за x значение

 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.//dec - уменьшить на 1

 

12.


22.01.2015; 17:37
хиты: 157
рейтинг:0
Точные науки
информатика
Языки программирования
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь