Вопрос № 174715: Здравствуйте, уважаемые эксперты. Как переделать алгоритм для сортировки массивов? У меня имеется двумерный массив Dim Massiv(i-1, J-1) As integer Соответственно из i строк и j столбцов. Все элементы типа Integer. Задача - отвортирова...
Вопрос № 174715:
Здравствуйте, уважаемые эксперты. Как переделать алгоритм для сортировки массивов?
У меня имеется двумерный массив Dim Massiv(i-1, J-1) As integer Соответственно из i строк и j столбцов. Все элементы типа Integer. Задача - отвортировать каждую (i) строку массива по возрастанию.
Пример - был массив 5 1 8 3 4 (количество строк и столбцов задано заранее и может быть любое > 0). 6 9 2 7 5 Стал массив 1 3 4 5 8 2 5 6 7 9
Есть код для сортировки одномерных массивов,
и его нужно несколько переделать. [code] Public SUB BubbleSort(ByRef Arr() AS INTEGER, ByRef N AS INTEGER) DIM I AS INTEGER DIM J AS INTEGER DIM Tmp AS INTEGER
FOR i=0# TO N-1# STEP 1 FOR j=0# TO n-2#-i STEP 1 IF Arr(j)>Arr(j+1#) THEN Tmp = Arr(j) Arr(j) = Arr(j+1#) Arr(j+1#) = Tmp END IF NEXT j NEXT i END SUB<
br>[code]
Если вы знаете, как это сделать, то прошу Вас переделать данный код. Спасибо.
Отвечает Megaloman, Бакалавр :
Здравствуйте, Иванов Андрей Владимирович. Переделки подпрограммы самые минимальные: пишем еще один внешний цикл (по строкам), алгоритм сортировки строки оставляем Ваш. Единственное, заменяем одномерный массив на двумерный (первый индекс у меня отвечает за номер строки) В вызове подпрограммы добавляем вторую размерность. M-число строк, N-число столбцов (или, если угодно, число элементов в строке). Итак, подпрограмма примет вид (не знаю, в каком Basic Вы пишите, постарался в подпрограмме полностью
оставить Ваш синтаксис написания операторов):
Код:
Public Sub BubbleSort(ByRef Arr() As Integer, ByRef M As Integer, ByRef N As Integer) Dim i As Integer Dim j As Integer Dim k As Integer Dim Tmp As Integer
For k = 0# To M - 1# Step
1 For i = 0# To N - 1# Step 1 For j = 0# To N - 2# - i Step 1 If Arr(k, j) > Arr(k, j + 1#) Then Tmp = Arr(k, j) Arr(k, j) = Arr(k, j + 1#) Arr(k, j + 1#) = Tmp End If Next j Next i Next k End Sub
Программу отлаживал как макрос в Excel 2003. Работает, убедился. Вот его текст
For k = 0 To kk - 1 For i = 0 To ii - 1 Range("A1").Offset(k, i) = Massiv(k, i) Next Next
Call BubbleSort(Massiv, kk, ii)
For k = 0 To kk - 1 For i = 0 To ii - 1 Range("A1").Offset(k + 10, i) = Massiv(k, i) Next Next
End Sub
Public Sub BubbleSort(ByRef Arr() As Integer, ByRef M As Integer, ByRef N As Integer) Dim
i As Integer Dim j As Integer Dim Tmp As Integer
For k = 0# To M - 1# Step 1 For i = 0# To N - 1# Step 1 For j = 0# To N - 2# - i Step 1 If Arr(k, j) > Arr(k, j + 1#) Then Tmp = Arr(k, j) Arr(k, j) = Arr(k, j + 1#) Arr(k, j + 1#) = Tmp End If Next j Next i Next k End Sub
В прикреплённом файле экселовский файл
с работающим макросом.
Прикрепленный файл:загрузить »
----- Нет времени на медленные танцы
Ответ отправил: Megaloman, Бакалавр
Ответ отправлен: 30.11.2009, 20:59
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257132
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.