Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы,ответы по практикам.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.2 Mб
Скачать

24 Метод выбора

Сортировка выбором Принцип метода: Находим (выбираем) в массиве элемент с минимальным значением на интервале от 1-го элемента до n-го (последнего) элемента и меняем его местами с первым элементом. На втором шаге находим элемент с минимальным значением на интервале от 2-го до n-го элемента и меняем его местами со вторым элементом. И так далее для всех элементов до n-1-го. Рассмотрите схему алгоритма прямого выбора.         Рассмотрите процедуру, реализующую выше рассмотренный алгоритм: Procedure Vibor(Var a: Array1); Var i, j, Min, MinI : integer; Begin for i:=1 to c do begin Min:=a[i]; MinI:=i; for j:=i+1 to c do if a[j]<min   then begin Min:=a[j]; MinI:=j; end; a[MinI]:=a[i]; a[i]:=Min; end; End;

26 Метод вставки

сортировку методом вставки. Принцип метода заключается в следующем: Массив разделяется на две части: отсортированную и не отсортированную. элементы из не отсортированной части поочередно выбираются и вставляются в отсортированную часть так, чтобы не нарушить в ней упорядоченность элементов. В начале работы алгоритма в качестве отсортированной части массива принимают только первый элемент, а в качестве не отсортированной – все остальные элементы. Таким образом, алгоритм будет состоять из (n-1)-го прохода (n – размерность массива), каждый из которых будет включать четыре действия: • взятие очередного i-го не отсортированного элемента и сохранение его в дополнительной переменной; • поиск позиции j в отсортированной части массива, в которой присутствие взятого элемента не нарушит упорядоченности элементов; • сдвиг элементов массива от i-го до j-1-го вправо, чтобы освободить найденную позицию вставки; • вставка взятого элемента в найденную i-ю позицию. Для реализации данного метода можно предложить несколько алгоритмов, которые будут отличаться способом поиска позиции вставки. Рассмотрите процедуру, реализующую выше рассмотренный алгоритм: Procedure Vstavka(Var a : Array1); Var i, j,e,g:integer; Begin for i:=2 to c do begin e:=A[i]; j:=1; while (e>a[j]) do Inc(j); for g:=i-1 downto j do a[g+1]:=a[g]; a[j]:=e; end; End; Задание. Составьте программу сортировки одномерного массива рассмотренным методом.

35 Организация динамических структур данных

Динамические структуры данных

Объект данных обладает динамической структурой, если его размер изменяется в процессе выполнения программы или он потенциально бесконечен.

Классификация структур данных

Используемые в программировании данные можно разделить на две большие группы:

Данные статической структуры – это данные, взаиморасположение и взаимосвязи элементов которых всегда остаются постоянными.

Данные динамической структуры – это данные, внутреннее строение которых формируется по какому-либо закону, но количество элементов, их взаиморасположение и взаимосвязи могут динамически изменяться во время выполнения программы, согласно закону формирования.

Данные динамической структуры:

К данным динамической структуры относят файлы, несвязанные и связанные динамические данные.

Заметим, что файлы в данной классификации отнесены к динамическим структурам данных. Это сделано исходя из вышеприведенного определения. Хотя удаление и вставка элементов в середину файла не допускается, зато длина файла в процессе работы программы может изменяться – увеличиваться или уменьшаться до нуля. А это уже динамическое свойство файла как структуры данных.

Для работы с динамическими переменными в программе должны быть выполнены следующие действия:

  • Выделение памяти под динамическую переменную;

  • Инициализация указателя;

  • Освобождение памяти после использования динамической переменной.

Программист должен сам резервировать место, определять значение указателей, освобождать ДП.

Вместо любой статической переменной можно использовать динамическую, но без реальной необходимости этого делать не стоит.

Присваивание значений динамическим переменным

После того, как динамическая переменная объявлена, ей можно присваивать значения, изменять их, использовать в выражениях и т.д. Для этого используют следующее обращение: переменная_указатель^. Такое обращение называется операция разадресации (разыменования). Таким образом происходит обращение к значению, на которое указывает указатель, т.е. к данным. Если же за переменной_указателем значок ^ не стоит, то имеется в виду адрес, по которому расположены данные.

Динамически размещенные данные можно использовать в любом месте программы, где допустимо использование выражений соответствующего типа.

Например:

R^:= sqr( R^) + I^ -17; q^:= 2; inc(q^); writeln(q^)

Недопустимо использовать выражения, подобные следующим:

Адрес --->R:= sqr( R^) + I^ -17 <---вещественное выражение. Вещественная переменная --->R^:= sqr( R) <---аргумент – адрес.

Рассмотрим пример работы с указателями:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]