Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Сортировка выбором

Алгоритмы сортировки

Вопросы для самопроверки

Инициализация массива

Инициализацию массивов можно осуществить либо программно, либо с помощью типизированных констант.

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

Пример: заполнения массива данными

const

N=10;

M=5;

type

TMatrix = array[1..N, 1..M] of real;

var

X: TMatrix;

i, j: integer;

for i:=1 to N do

for j:=1 to M do writeln(X[i, j]);

При инициализации с помощью типизированных констант значения элементов заключаются в скобки и разделяются запятыми.

Пример: пример инициализации одномерного массива с помощью типизированных констант

type

TStatus = array[1..3] of string[7];

const

Status: TStatus = ('Active','Passive','Waiting');

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

Пример: пример инициализации многомерного массива с помощью типизированных констант

type Cube = array[0..1,0..1,0..1] of integer;

const Maze: Cube = (((0,1), (2,3)), ((4,5), (6,7)));

1. Что такое массив?

2. Как описываются массивы на языке Паскаль?

3. Что такое элемент массива? Индексный тип?

4. Какие операции допустимы над массивами?

5. Как можно на языке Паскаль описать многомерный массив?

6. Как можно просуммировать значения элементов массива?


Нередко в программировании возникает задача отсортировать какие-либо величины. Иногда предварительная сортировка данных позволяет существенно сократить содержательную часть алгоритма программы. В этой ситуации могут помощь существующие алгоритмы сортировки.

В данном параграфе будут рассмотрены так называемые простые сортировки. К ним относятся методы, сложность которых пропорциональна квадрату размерности входных данных. Иными словами, при сортировке массива, состоящего из N компонент, такие алгоритмы будут выполнять С*N2 действий, где С – некоторая константа.

Количество действий, необходимых для упорядочения некоторой последовательности данных, конечно же, зависит не только от длины этой последовательности, но и от ее структуры. Например, если на вход подается уже упорядоченная последовательность, то количество действий будет значительно меньше, чем в случае перемешанных входных данных.

Для начала рассмотрим алгоритм сортировки выбором.

Суть алгоритма заключается в следующем: находим наименьший элемент в массиве и меняем его местами с элементом, находящимся на первом месте. Далее процесс повторяется, но уже начиная со второй позиции в массиве и так далее, пока не отсортируем весь массив.

Алгоритм для сортировки массива из N элементов.

1. Начинаем сортировку с 1-го элемента: i:=1.

2. Находим номер j минимального элемента среди элементов от i до N.

3. Меняем местами элементы i и j.

4. Если i < N -1, то увеличиваем значение i на 1 и возвращаемся к шагу 2.

5. Конец алгоритма. Массив отсортирован.

Пример: алгоритм сортировки выбором массива str

for i:= 1 to n-1 do

begin

min:=i;

for j:= i+1 to n do

if str[ j ]<str[ min ] then min:= j;

if i<>j then

begin

t:= str[ min ];

str[ min ]:= str[ i ];

str[ i ]:= t;

end;

end;

В лучшем случае (если исходная последовательность уже упорядочена) алгоритм произведет (N -1)*(N +2)/2 сравнений и 0 пересылок данных. В остальных же случаях количество сравнений останется прежним, а вот количество пересылок элементов будет равным 3*(N -1).

<== предыдущая лекция | следующая лекция ==>
Допустимые операции с массивами | Улучшенные сортировки
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 355; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.