Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2011, 11:12   #1
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию как правильнее отсортировать массив?

у меня есть 3 двумерных различных массивов,сортировка их происходит таким образом
Код:
Function bligaishie_pryamoug(isk_zna4, spisok_for_sort)
Dim i As Integer
i = 0
Dim j As Integer
Dim min_sbras As Single
min_sbras = 32000
Dim n As Integer

Do While i < UBound(spisok_for_sort, 1) + 1
    j = i
    Do While j < UBound(spisok_for_sort, 1) + 1
        If Abs(rashod / spisok_for_sort(j, 2) / 3600 - isk_zna4) < min_sbras Then
            n = j
            min_sbras = Abs(rashod / spisok_for_sort(j, 2) / 3600 - isk_zna4)
        End If
        j = j + 1
    Loop
    x = spisok_for_sort(i, 0)
    y = spisok_for_sort(i, 1)
    z = spisok_for_sort(i, 2)
    spisok_for_sort(i, 0) = spisok_for_sort(n, 0)
    spisok_for_sort(i, 1) = spisok_for_sort(n, 1)
    spisok_for_sort(i, 2) = spisok_for_sort(n, 2)
    spisok_for_sort(n, 0) = x
    spisok_for_sort(n, 1) = y
    spisok_for_sort(n, 2) = z
    min_sbras = 32000
    i = i + 1
Loop

bligaishie_pryamoug = spisok_for_sort
End Function
и в дальнейшем вывод в listbox
Код:
    Dim retval1
    retval1 = bligaishie_pryamoug(TextBox3.Text, Stand_krug)
    Form1.ListBox1.Clear
    Form1.ListBox1.AddItem "Ðàäèóñ"
    ListBox1.List(0, 2) = "Ñêîðîñòü"
    For i = 0 To 9
        Form1.ListBox1.AddItem retval1(i, 0)
        ListBox1.List(i + 1, 2) = Format(rashod / retval1(i, 2) / 3600, "#,##0.00")
    Next i
т.е. фактически мне не нужно сортировать полностью массив,а нужен новый массив из 10 элементов которые будут минимальные по вот этому условию
Код:
Abs(rashod / spisok_for_sort(j, 2) / 3600 - isk_zna4)
но из за того что вот это условие может быть одинаковым для 3-4 элементов из массива , я ничего умнее не придумал как полностью его сортировать
вот один из массивов
Код:
Dim Ne_Stand_pryam(702, 2) As Single
Dim n As Integer
    n = 0
    For i = 100 To 2000 Step 50
        For j = 100 To 2000 Step 50
        If j / i <= 6.3 And j >= i Then
            Ne_Stand_pryam(n, 0) = i
            Ne_Stand_pryam(n, 1) = j
            Ne_Stand_pryam(n, 2) = Ne_Stand_pryam(n, 0) * Ne_Stand_pryam(n, 1) / 1000000
            n = n + 1
        End If
        Next j
    Next i
Composter вне форума Ответить с цитированием
Старый 19.05.2011, 13:25   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Поискать готовую функцию сортировки двумерного массива не пробовали?
http://excelvba.ru/code/SortArray
EducatedFool вне форума Ответить с цитированием
Старый 19.05.2011, 16:52   #3
Composter
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 35
По умолчанию

странно немного предлагать функцию сортировки массива,которая в 2 раза медленнее обрабатывает массив чем моя.вот в этом файле в этом можно убедиться даже без секундомера.меня интересовал наоборот более быстрый вариант,потому как в форме одновременно обрабатывается 3 массива(которые в 1 сообщении),и если на моем компе это происходит почти незаметно,то на слабеньких компах задержка вывода значения составляет 2-3 секунды.вопрос свой решил простым способом,так как мне нужно 10 первых значений после сортировки то сделал так
Код:
Do While i < lBound(spisok_for_sort, 1) + 9
еще появился вопрос как вместо во этого
Код:
min_sbras = 32000
задавать переменной максимальное значение для выбранного типа переменной?
Вложения
Тип файла: zip Копия Учебный.zip (57.9 Кб, 15 просмотров)
Composter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Indy 10 TCPClient как будет правильнее? pomkalk Работа с сетью в Delphi 0 04.04.2011 22:36
Как отсортировать массив Double с максимум в середине списка? SkAndrew Общие вопросы Delphi 4 12.02.2010 19:48
Как правильнее, экономичнее и красивее? LakyWinter Microsoft Office Access 1 20.11.2008 09:51
как отсортировать массив под данный отрезок и как минимум и максимум из него найти SIEGER Паскаль, Turbo Pascal, PascalABC.NET 1 20.11.2008 08:58