Простая сортировка
Задача: Задан массив из 100 произвольных положительных чисел. Отсортировать его по возрастанию.
Идея решения: Отсутствует. Тогда поговорим об идее поиска идеи. Если мы не можем придумать, как запрограммировать задачу, нужно подробно представить себе, в каком порядке мы решали бы ее вручную, без компьютера. Как бы мы сами сортировали 100 чисел, записанных на бумаге? Мы сделали бы вот что. Запаслись карандашом, ластиком и другим, пустым листом бумаги из 100 клеток. Затем нашли бы в исходном массиве максимальное число и записали его в самую правую клетку, а в исходном массиве на его месте записали бы число, меньшее самого маленького в массиве (в нашем случае подойдет 0). Затем нашли бы в изменившемся исходном массиве новое максимальное число и записали его на второе справа место, а на его место в исходном массиве – 0. И так далее.
Вот программа, воплощающая эту идею для 10 чисел:
'Вспомогательная функция для поиска максимума в массиве m размера N+1. Она выдает значение
'максимального элемента (maximum) и заодно мы узнаем номер этого элемента (Nomer_max):
Function maximum(ByVal m() As Integer, ByVal N As Integer, ByRef Nomer_max As Integer) As Integer
Dim i, max As Integer
max = m(0) : Nomer_max = 0 'max - "временный" максимум
For i = 1 To N
If max < m(i) Then
max = m(i)
Nomer_max = i
End If
maximum = max
Next
End Function
'Основная процедура сортировки исходного массива mass_ish размера N+1 в результирующий - mass_rez:
Sub sortirovka(ByVal mass_ish() As Integer, ByVal N As Integer, ByVal mass_rez() As Integer)
Dim i, Nom_max As Integer
For i = 0 To N
mass_rez(N - i) = maximum(mass_ish, N, Nom_max) 'Пишем "в правую клетку"
mass_ish(Nom_max) = 0 'Ноль - на старое место
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim massiv_ishodn() As Integer = {41, 8, 17, 82, 20, 2, 30, 12, 6, 9} 'Это исходный массив
Dim N As Integer = massiv_ishodn.Length - 1 'Это его размер без 1
Dim massiv_rezult(N) As Integer 'Это наш пустой лист бумаги
sortirovka(massiv_ishodn, N, massiv_rezult) 'Сортируем массив
Dim i As Integer
For i = 0 To N
Debug.WriteLine(massiv_rezult(i)) 'Распечатываем отсортированный массив
Next
End Sub
Примечания: В программе вам полезно разобраться самому. Обратите внимание, что в заголовке функции в одном месте вместо ByVal употребляется ByRef. Разберитесь, почему. Обратите внимание, что функция maximum, кроме того, что сама имеет значение максимального элемента массива, выдает еще и порядковый номер максимального элемента – Nomer_max. Это, как я уже говорил, называется побочным эффектом функции.