Реферат: Урок 6 (1 час) Тема урока
Давыдова Е.В., школа № 444
Урок 6 (1 час)
Тема урока. Сортировка массивов
Цель урока. Познакомить учащихся с основными алгоритмами сортировки одномерных массивов.
План урока.
1. Общие замечания.
2. Сортировка методом выбора.
3. Сортировка методом обмена (метод "пузырька").
Сортировка – процесс размещения элементов заданного множества объектов в некотором определенном порядке, как правило, в порядке возрастания или убывания.
Зачем нужна сортировка?
Легче работать с отсортированными данными, чем с произвольно расположенными данными:
поиск заданного элемента,
определение имеются ли пропущенные элементы,
сравнение двух массивов.
^ Предварительные замечания.
Общий вид программы сортировки:
Uses Crt;
Const N = 50;
Type T_Mas = Array [1..N] of Integer;
Var Mas : T_Mas;
Kol : Integer;
Procedure Count (Var Kol_1:Integer);
{Процедура определения размерности массива}
^ Var IOR : Word;
Begin
Write('Введите размерность массива: ');
Repeat
{$I-} ReadLn(Kol_1); {$I+}
IOR := IOResult;
If (IOR <> 0) or (Kol_1>N) Then
WriteLn('Ошибка. Повторите ввод.')
Until (Kol_1<=N) and (IOR=0)
End;
Procedure Filling (Kol_1:Integer; Var A: T_Mas);
{Процедура заполнения массива}
Var I : Integer;
Begin
Randomize;
For I := 1 To Kol_1 Do A[I] := Random(N)
End;
Procedure Print (Kol_1:Integer; A: T_Mas);
{Процедура вывода массива}
Var I : Integer;
Begin
For I:=1 to Kol_1 do Write (A[I], ' ')
End;
Procedure Sort_Metod_ (Kol_1:Integer; Var X: T_Mas);
{Процедура сортировки по методу . . .}
Begin
ClrScr;
Count(Kol);
Filling(Kol, Mas);
WriteLn('Исходный массив'); Print (Kol, Mas);
Sort_Metod_ (Kol, Mas);
WriteLn;
WriteLn('Отсортированный массив'); Print (Kol, Mas);
Repeat until KeyPressed
End.
^ Пример 5 13 7 9 1 8 16 4 10 2 Сортировка выбором
Принцип. В неупорядоченной последовательности выбирается минимальный (максимальный) элемент и записывается на первое место. Этот элемент исключается из дальнейшей обработки. Оставшаяся последовательность элементов принимается за исходную. И процесс повторяется до тех пор, пока все элементы не будут выбраны.
Блок-схема
Нет
Нет
Нет
Программа
Procedure Sort_Metod_Choice (Kol_1:Integer; ^ Var X: T_Mas);
Var K, J, Min, I_Min : Integer;
Begin
For K:=1 to Kol_1 do
begin
Min := X [K]; I_Min := K;
For J := K+1 to Kol_1 do
If X[J] < Min Then
begin Min:= X[J]; I_Min:=J end;
X[I_Min] := X[K]; X[K] :=Min
end
End;
Задание
Подсчитать количество произведенных сравнений.
Подсчитать количество произведенных перестановок.
Изменить процедуру сортировки так, чтобы сортировка начиналась с последнего элемента массива (с конца, индекс К - уменьшался).
Отсортировать четные элементы массива.
^ Сортировка обменом (метод "пузырька")
Принцип. Все соседние элементы массива попарно сравниваются друг с другом и меняются местами в том случае, если предшествующий элемент больше (меньше) последующего. Затем процесс повторяется. Сортировка заканчивается, когда перестановок в массиве не будет.
Блок-схема.
Нет
Нет
Да
Программа
Procedure Sort_Metod_Bubble (Kol_1:Integer; Var X: T_Mas);
Var K, A : Integer;
Flag : Boolean;
Begin
Repeat
Flag := False;
For K := 2 to Kol_1 do
If X[K] < X [K-1] Then
begin
A := X[K-1];
X[K-1] := X[K];
X[K] := A;
Flag:= True
end;
Kol_1 := Kol_1 – 1;
Until not Flag
End;
Задание
Подсчитать количество произведенных сравнений.
Подсчитать количество произведенных перестановок.
Сравнить сортировку методами выбора и обмена по количеству сравнений и перестановок.
Описать процедуру "пузырьковой" сортировки по убыванию.
Урок 7 (1 час)
Тема урока. Сортировка массивов (продолжение).
Цель урока. Познакомить учащихся с основными алгоритмами сортировки одномерных массивов.
План урока.
1. Сортировка методом прямого включения.
2. Слияние двух массивов.
^ 1. Сортировка методом прямого включения
При сортировке из неупорядоченной последовательности элементов поочередно выбирается каждый элемент, сравнивается с уже упорядоченными элементами и помещается на соответствующее место в списке упорядоченных элементов.
место вставки очередной элемент
1 этап
38
12
80
15
36
23
74
62
2 этап
12
38
80
15
36
23
74
62
3 этап
12
38
80
15
36
23
74
62
4 этап
12
15
38
80
36
23
74
62
5 этап
12
15
36
38
80
23
74
62
6 этап
12
15
23
36
38
80
74
62
7 этап
12
15
23
36
38
74
80
62
12
15
23
36
38
62
74
80
Procedure Sort_Metod_Insert (Kol_1:Integer; Var X: T_Mas);
Var K, J, A : Integer;
Begin
For K := 2 to Kol_1 do
begin
^ A := X[K]; J := K-1;
While (J > 0) and (A <= X[J]) do
begin X[J+1] := X[J]; Dec(J) end;
X[J+1] := A
end
End;
2. Слияние двух массивов
Дан массив X[1..N] и числа K, M, N, такие, что K<=M<=N. Описать процедуру, которая сливает отрезки массива, X[K+1], . . , X[M] и X[М+1], . . , X[N] в упорядоченный отрезок массива X[K+1], . . , X[N].
Основная идея решения состоит в сравнении очередных элементов каждой части, выявления, какой из них меньше, перенос его в массив С, который является вспомогательным, и продвижении по тому массиву-части, из которого взят элемент. Когда одна из частей будет пройдена до конца, остается только перенести в С оставшиеся элементы второй части, сохраняя их порядок.
Procedure Sort_Metod_Merge (K, M, N:Integer; Var X: T_Mas);
Var I, J, L : Integer;
C : T_Mas;
Begin
I := K+1; J := M+1; L := 1;
While (I <=M) and (J <=N) Do {Пока не закончится хотя бы одна часть}
begin
If X[I] <= X[J] Then
begin C[L] := X[I]; Inc(I) end
Else
begin C[L] := X[J]; Inc(J) end;
Inc(L)
end; {Один из массивов обработан полностью}
{Перенос в С остатка другого массива-части}
While I <= M Do
begin C[L] := X[I]; Inc(I); Inc(L) end;
While J <= N Do
begin C[L] := X[J]; Inc(J); Inc(L) end;
{Перенос из вспомогательного массива С в массив Х}
For I := 1 to L do X[K+I] := C[I]
End;
Задание
1. Написать программу, в которой массив разбивается на три части. Вторая и третья часть массива отдельно сортируются, а затем объединяются с помощью алгоритма слияния.
2. Написать программу, которая сортирует один массив 3-мя способами и сравнивает их по времени сортировки. Количество элементов массива не менее 500.
Урок 8 (1 час)
Тема урока. Сортировка массивов (продолжение).
Цель урока. Познакомить учащихся с основными алгоритмами сортировки одномерных массивов.
План урока.
1. Сортировка с разделением ("быстрая" сортировка, метод Хоара).
2. Рекурсия.
^ 1. Сортировка с разделением ("быстрая" сортировка, метод Хоара)
1. В исходном не отсортированном массиве выбрать некоторый элемент x=a[k] (барьерный элемент).
2. Переставить элементы массива таким образом, чтобы слева от х оказались элементы массива, меньше или равные х, а справа – элементы массива, больше х.
Это можно сделать следующим образом. Используем два "указателя" – i и j; i ведет отсчет номеров элементов слева, а j – справа.
Сначала имеем i = 1, j = n (в рассматриваемом случае число элементов массива n=16). Значение основного элемента обозначим m.
Сравним m и a[j]. Если a[j]>m, то устанавливаем j=j-1 и проводим следующее сравнение m и a[j]. Продолжаем уменьшение j до тех пор, пока не достигнем a[j]<=m. Тогда поменяем местами элементы a[j] и a[i] (строку 5, обмен значений 38 и 4) , установим значение i = i+1 и, сравнивая элементы a[i] со значением m. После следующего обмена (строка 10, элементы со значениями 79 и 38) опять уменьшим j, и будем просматривать элементы справа налево и т.д. до тех пор, пока не станет j<=i.
i
j
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Действия
38
8
16
6
79
76
57
24
56
2
58
48
4
70
45
47
исходный массив
38
47
уменьшение j
38
45
-
38
70
-
38
4
4 < 38
4
38
обмен
8
38
увеличение i
16
38
-
6
38
-
79
38
79 > 38
38
79
обмен
38
48
уменьшение j
38
58
-
38
2
2 < 38
2
38
обмен
76
38
увеличение i
38
76
обмен
38
56
уменьшение j
38
24
24 < 38
24
38
обмен
57
38
увеличение i
38
57
обмен
4
8
16
6
2
24
38
57
56
76
58
48
79
70
45
47
полученный массив
Главная цель – не разделить исходный массив, а отсортировать его. Однако, разделив массив, можно сделать то же самое с обеими полученными частями, а затем с частями частей и т.д., пока каждая часть будет содержать только один элемент. Соответствующие действия можно выполнить, используя рекурсию или механизм стека.
Программа
Вспомогательная процедура, выполняющая разделение массива с границами L и R на две части.
Procedure Partition (L,R : Integer; Var A : T_Mas);
Var I, J, M, Tmp : Integer;
Begin
If L < R {условие продолжения рекурсии} Then
begin
I := L; J := R;
M := A[I];
Repeat
While M < A[J] Do {Уменьшение указателя J}
J := J -1;
If I <= J Then
begin {Обмен}
Tmp:= A[I]; A[I] := A[J]; A[J] := Tmp;
I := I + 1;
end;
While M > A[I] Do {Увеличение указателя I}
I := I + 1;
If I <= J Then
begin {Обмен}
Tmp:= A[I]; A[I] := A[J]; A[J] := Tmp;
J := J - 1;
end;
until I > J;
Partition (L, J, A); {Разделяем левую часть}
Partition (I, R, A); {Разделяем правую часть}
end
end;
Procedure Sort_Metod_Quick (Kol_1:Integer; Var X: T_Mas);
Begin
Partition (1, Kol_1, X)
End;
еще рефераты
Еще работы по разное
Реферат по разное
Фрагмент программы: For j:=1 to n-1 do {Цикл по просмотрам} For I:=1 to n j do {Просмотр массива}
17 Сентября 2013
Реферат по разное
Пояснения к занятию (уроку), посвящённому Дню православной книги (14 марта) в 2010 году
17 Сентября 2013
Реферат по разное
Учащимся предлагается тест на усвоение дифракции и интерференции света. I. Тест
17 Сентября 2013
Реферат по разное
Цель: Установление межпредметной связи истории Сибири и литературного наследия Сибири
17 Сентября 2013