Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб9_VisualBasic.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
217.09 Кб
Скачать

2.6. Сортировка элементов массива

Под сортировкой понимают процесс перестановки объектов данного массива в определенном порядке. Целью сортировки является упорядочение массивов для облегчения последующего поиска элементов в данном массиве. Существует много методов сортировки массивов. Рассмотрим метод простого выбора.

Этот метод основывается на алгоритме поиска минимального элемента. В массиве А(1..n) отыскивается минимальный элемент, который ставится на первое место. Для того чтобы не потерять элемент, стоявший на первом месте, этот элемент устанавливается на место минимального. Затем в усеченной последовательности, исключая первый элемент, отыскивается минимальный элемент и ставится на второе место, и так далее n-1 раз, пока не встанет на свое место предпоследний n-1 элемент массива А, сдвинув максимальный элемент в самый конец.

Рассмотрим алгоритмическое решение задачи на примере сортировки некоторого массива значений по возрастанию. В соответствии с вышеописанным методом нам необходимо несколько раз выполнять операции поиска минимального элемента и его перестановку с другим элементом, то есть потребуется несколько раз просматривать элементы массива с этой целью. Количество просмотров элементов массива равно n-1, где n – количество элементов массива.

Рассмотрим выполнение сортировки данным методом на конкретном примере. Пусть исходный массив содержит 5 элементов (2, 8, 1, 3, 7). Количество просмотров согласно модифицированному методу простого выбора будет равно 4. Покажем в таблице 1, как будет изменяться исходный массив на каждом просмотре. Обозначим через k – счетчик (номер) просмотров элементов массива. Отметим, что для перестановки элементов местами необходимо знать их порядковые номера.

Таблица 1. Пример сортировки

Номер просмотра массива k

Исходный массив

Переставляемый элемент

Минимальный элемент

Массив после перестановки

Номер

Значение

Номер

Значение

1

(2,8,1,3,7)

1

2

3

1

(1,8,2,3,7)

2

1,(8,2,3,7)

2

8

3

2

1,(2,8,3,7)

3

1,2,(8,3,7)

3

8

4

3

1,2,(3,8,7)

4

1,2,3,(8,7)

4

8

5

7

1,2,3,7,8

Программную реализацию сортировки массива смотрите в упражнении 2.

3. Упражнения

Упражнение 1

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

Реализация проекта

1. Создайте новый проект.

2. Разработайте интерфейс, аналогичный изображенному на рис. 9.1.

3. Обратите внимание, что все подзадачи решаются за один просмотр элементов массива.

Например, поиск минимального элемента в массиве. Вначале устанавливается текущий минимум по первому элементу массива Min=A(1). Затем начинается просмотр элементов массива: выбирается очередной элемент A(i) и сравнивается с Min. Если элемент A(i) меньше текущего Min, то выполняется переприсваивание Min=A(i).

4. Программный код приложения:

Option Explicit

Option Base 1

Dim n As Integer

Dim A() As Integer ' Описание динамического массива целых чисел

Private Sub Command1_Click()

Dim i As Integer

n = Val(Text1.Text) ' Число элементов массива

ReDim A(n) ' Задать массиву А длину n

Text2.Text = "" ' Очистить текстовое поле Text2

Randomize

For i = 1 To n

A(i) = -10 + Int(Rnd * 21) ' Присвоить элементу массива случайное

' целое число из отрезка [-10, 10]

Text2.Text = Text2.Text + " " + Str(A(i)) ' Вывести элементы массива

Next i

End Sub

Private Sub Command2_Click()

Dim i As Integer, Sum As Integer, Min As Integer

Dim CountP As Integer, Sum1 As Integer, Kol As Integer

Text3.Text = ""

Text4.Text = ""

Text5.Text = ""

Text6.Text = ""

Sum = 0

CountP = 0

Sum1 = 0

Kol = 0

If Check3.Value = 1 Then Min = A(1) ' Пусть минимальным элементом будет

' первый элемент массива

For i = 1 To n

If Check1.Value = 1 Then ' Определить сумму всех элементов

Sum = Sum + A(i)

End If

If Check2.Value = 1 Then 'Определить количество положительных чисел

If A(i) > 0 Then CountP = CountP + 1

End If

If Check3.Value = 1 Then ' Определить минимальный элемент массива

If A(i) < Min Then Min = A(i)

End If

If Check4.Value = 1 Then ' Определить сумму и количество элементов

If A(i) Mod 5 = 0 Then ' массива кратных пяти

Sum1 = Sum1 + A(i)

Kol = Kol + 1

End if

End If

Next i

' Вывести результаты обработки массива

If Check1.Value = 1 Then Text3.Text = Str(Sum)

If Check2.Value = 1 Then Text4.Text = Str(CountP)

If Check3.Value = 1 Then Text5.Text = Str(Min)

If Check4.Value = 1 Then Text6.Text = Str(Sum1 / Kol)

End Sub

5. Сохраните и протестируйте проект (рис. 9.1).

Рис. 9.1

Упражнение 2

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

Реализация проекта

1. Создайте новый проект.

2. Разработайте интерфейс, аналогичный изображенному на рис. 9.2.

3. Программный код приложения:

Option Explicit

Option Base 1

Dim n As Integer

Dim A() As Integer

Private Sub Command1_Click()

Dim i As Integer

n = Val(Text1.Text)

ReDim A(n)

Text2.Text = ""

Randomize

For i = 1 To n

A(i) = Int(Rnd * 10) ' Присвоить элементу массива случайное

' целое число из отрезка [0, 9]

Text2.Text = Text2.Text + " " + Str(A(i)) ' Вывести элементы массива

Next i

End Sub

Private Sub Command2_Click()

Dim i As Integer, k As Integer, m As Integer, n_m As Integer

For k = 1 To n – 1

m = A(k): n_m = k

For i = k + 1 To n

If Option1.Value And A(i) < m Then 'Сортировка по возрастанию

m = A(i)

n_m = i

End If

If Option2.Value And A(i) > m Then 'Сортировка по убыванию

m = A(i)

n_m = i

End If

Next i

' Перестановка элементов

If n_m <> k Then

A(n_m) = A(k)

A(k) = m

End If

Next k

' Вывести элементы отсортированного массива

Text3.Text = ""

For i = 1 To n

Text3.Text = Text3.Text + " " + Str(A(i))

Next i

End Sub

5. Сохраните и протестируйте проект (рис. 10.2).

Рис. 9.2

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