Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция по Ms Access.doc
Скачиваний:
92
Добавлен:
19.05.2015
Размер:
1.86 Mб
Скачать

11. Классические задачи программирования: сортировка, поиск

Пример

Сортировка методом “пузырьков”.

1. Функция для сортировки:

Public Function сортировка(массив() As Variant) As Boolean

Dim a As Boolean, t As Variant, x As Integer

For x = LBound(массив) To UBound(массив)

If IsNull(массив(X)) Then Exit Function

Next x

Do

a = False

For x = UBound(массив) To (LBound(массив) + 1) Step -1

If массив(x - 1) > массив(x) Then

t = массив(x - 1)

массив(x - 1) = массив(x)

массив(x) = t

a = True

End If

Next x

For x = (LBound(массив) + 1) To UBound(массив)

If массив(x - 1) > массив(x) Then

t = массив(x - 1)

массив(x - 1) = массив(x)

массив(x) = t

a = True

End If

Next x

Loop While a

сортировка = True

End Function

2.Создадим форму с двумя текстовыми полями и кнопкой и по событию Нажатие кнопки пишем процедуру для вызова этой функции:

Private Sub Кнопка0_Click()

Dim массив() As Variant

Dim test As Boolean

массив = Array(4, 12, 3, 7, 9, 1) ‘задание массива

For i = LBound(массив) To UBound(массив) ‘ печать исходного массива

s = s & массив(i) & " "

Next i

Поле1.Value = s

test = сортировка(массив) ‘ вызов функции “Сортировка”

s = " "

For i = LBound(массив) To UBound(массив) ‘ печать результата

s = s & массив(i) & " "

Next i

Поле3.Value = s

End Sub

Результат:

Пример

Быстрая сортировка

Алгоритм такой сортировки очень элегантен за счёт рекурсивного вызова функции.

Пишем функцию для быстрой сортировки:

Public Function быстро(массив() As Variant, k As Long, p As Long)

Dim i As Long, j As Long

Dim x, y AS single

i = k

j = p

x = массив((k + p) / 2)

Do While (i <= j)

Do While (массив(i) < x And i < p)

i = i + 1

Loop

Do While (x < массив(j) And j > k)

j = j - 1

Loop

If (i <= j) Then

y = массив(i)

массив(i) = массив(j)

массив(j) = y

i = i + 1

j = j - 1

End If

Loop

If (k < j) Then быстро массив, k, j ‘ Рекурсивный вызов функции

If (i < p) Then быстро массив, i, p

End Function

По нажатию кнопки пишем процедуру:

Private Sub Кнопка0_Click()

Dim массив() As Variant

Dim test As Boolean

массив = Array(4, 12, 3, 7, 9, 1)

For i = LBound(массив) To UBound(массив)

s = s & массив(i) & " "

Next i

Поле1.Value = s

Call быстро(массив, LBound(массив), UBound(массив)) ‘ вызов функции

s = " "

For i = LBound(массив) To UBound(массив)

s = s & массив(i) & " "

Next i

Поле3.Value = s

End Sub

Задачи поиска рассматривались выше.

При работе с объектами задачи сортировки теряют свою актуальность, так как можно использовать объект список (ListBox) и метод Sort.