Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8

 

  Вопрос: сортировка массива строк Добавлено: 04.07.08 14:03  

Автор вопроса:  s12

Ответить

  Ответы Всего ответов: 109  

Номер ответа: 16
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #16
Добавлено: 06.07.08 21:17
Интересно.. термин произошел от "retrieval", но читается [trai]

Ответить

Номер ответа: 17
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #17 Добавлено: 06.07.08 21:29
Это получается смесь поразрядной сортировки с бинарными деревьями что-ли?
Сейчас пороюсь в нете, посмотрим так ли хорош черт как его малюют.

Ответить

Номер ответа: 18
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #18 Добавлено: 06.07.08 22:24
Хех, а если Array пользовательского типа? (как в моем случае, сортировка нужна по одному из элементов типа string)

Ну и что же здесь сложного?

1) Можно реализовать в классе интерфейс IComparable и в нем указать свою логику сравнения
2) Можно сделать свой класс, который будет выполнять сравнение объектов для сортировки - он должен реализовать интерфйс IComparer
3) Создать свою процедуру сравнения (смотреть делегат System.Comparison)

И все это будет работать с Array.Sort

Ответить

Номер ответа: 19
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #19 Добавлено: 07.07.08 00:51
Steel Brand у тебя крыша поехала... какие классы, какие нафиг делегаты (незнал что они вообще в vb6 имеются), мне просто надо отсортировать массив, причем быстро!
Нафик все усложнять?!

Ответить

Номер ответа: 20
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #20 Добавлено: 07.07.08 00:58
1) Не видел здесь ни слова про VB6
2) Крыша по-моему поехала не у меня а у тебя, потому что ТЫ спросил про Array пользовательского типа, а я тебе объяснил как его сортировать, если твой аццкий моск отказывается воспринимать эту информацию ту лучше убей себя об стену потому что второй раз я это объяснять не буду.
3) Употреблять в одном предложении слова "vb6" и "быстро" - первый шаг к импотенции, или ты начитался статей типа "О бедном бейсике замолвите слово"?

Ответить

Номер ответа: 21
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #21 Добавлено: 07.07.08 03:01
Не видел здесь ни слова про VB6

Ибо сказано в коране "Имеет глаза и не видит, имеет уши и не слышит", по-моему для .нет есть отдельный форум, или я что-то путаю? :)

Крыша по-моему поехала не у меня а у тебя, потому что ТЫ спросил про Array пользовательского типа, а я тебе объяснил как его сортировать, если твой аццкий моск отказывается воспринимать эту информацию ту лучше убей себя об стену потому что второй раз я это объяснять не буду.

Я не просил объяснять как работать с пользовательскими типами, я просил АЛГОРИТМ СОРТИРОВКИ МАССИВА ТИПА STRING

Употреблять в одном предложении слова "vb6" и "быстро" - первый шаг к импотенции, или ты начитался статей типа "О бедном бейсике замолвите слово"?

Гм.. это заувалирование признание "я не знаю vb6" или просто так, общественное мнение?

Ответить

Номер ответа: 22
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #22 Добавлено: 07.07.08 03:37
Ибо сказано в коране "Имеет глаза и не видит, имеет уши и не слышит", по-моему для .нет есть отдельный форум, или я что-то путаю? :)

Я изначально привел код для .NET, ты не стал возражать что тебе он не подходит так как ты пишешь на VB6, из чего можно сделать вывод что ты писал на VB .NET, или просто стал дискутировать уже в этом контексте.

Я не просил объяснять как работать с пользовательскими типами, я просил АЛГОРИТМ СОРТИРОВКИ МАССИВА ТИПА STRING

Хорошо, может быть мне это приснилось но тогда объясни мне КТО написал ЭТО:

Хех, а если Array пользовательского типа? (как в моем случае, сортировка нужна по одному из элементов типа string)

Или мне причудилось слово ARRAY ПОЛЬЗОВАТЕЛЬСКОГО ТИПА???? Или может быть Ты марсианин????????? ЧТо-то я не замечал раньше на форуме представителей внеземных расс!!!!!!

Гм.. это заувалирование признание "я не знаю vb6" или просто так, общественное мнение?

Нет, это завуалированое признание "vb6 СОСЕТ в плане быстродействия и ничего с этим не поделаешь", являющееся общественным мнением.

Несогласный - отправляйся в бабруйск читать статьи на сайте ("О BASIC замолвите слово" не читай - это "заказуха";), писать бенчмарки, на .NET их тут достаточно было написано.

кончел!!!

PS ..................

Ответить

Номер ответа: 23
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #23 Добавлено: 07.07.08 04:05
Знаешь уважаемый Steel Brand ты просто грубиян, я не хочу с тобой спорить.

Ответить

Номер ответа: 24
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #24 Добавлено: 07.07.08 04:26
То есть по делу тебе нечего ответить?

Ответить

Номер ответа: 25
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #25 Добавлено: 07.07.08 06:31
По какому делу? Путаница с языками, такое бывает, тут ничего не поделаешь. Про марсианина ты конечно загнул, как ты назовешь такую конструкцию:

Private Type MyType
    sName as String
    dDate as Date
    lSize as Long
End Type
Dim aObj(2000) As MyType 'как назвать такой массив?

А это:
Нет, это завуалированое признание "vb6 СОСЕТ в плане быстродействия и ничего с этим не поделаешь", являющееся общественным мнением.

Полный бред, вскормленный фанатиками паскаля и дельфоф, во времена 4-5 бейсиков, тогда действительно так и было. Бенчмарки я бы с радостью написал, но знаком с .НЕТ довольно поверхносно (в смысле изучал, но серьезных проектов не писал), а код написанный в vb7-9 аналогично vb6 в 70% случаев выполняется медленнее.

Ответить

Номер ответа: 26
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #26 Добавлено: 07.07.08 06:38
Чтобы не быть голословным прогони такой код:
Dim iTest As Long, i As Long
Dim mMax As Single, mMin As Single
Dim tArr(1000000) As Single
Randomize Timer
    iTest = timeGetTime
    mMax = 12000000000.45
    mMin = -24000000.098
    lLen = Len(tArr(0))
    For i = 0 To 1000000
        tArr(i) = ((Rnd * mMax) - mMin)
    Next
    MsgBox timeGetTime - iTest

Даже не использую дополнительную оптимизацию в vb6 выйгрыш получается около 100 мс.

PS: timeGetTime (Private Declare Function timeGetTime Lib "winmm.dll" () As Long
)

Ответить

Номер ответа: 27
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #27 Добавлено: 07.07.08 16:31
Private Type MyType
    sName as String
    dDate as Date
    lSize as Long
End Type
Dim aObj(2000) As MyType 'как назвать такой массив?

Это другое дело, я с VB6 не работаю и встроенных простых средств для сортировки подобнго там насколько я помню нет.

Полный бред, вскормленный фанатиками паскаля и дельфоф, во времена 4-5 бейсиков, тогда действительно так и было.

В прошлом фанатик VB6, сейчас работаю с VB .NET. К сожалению это так и с этим ничего не поделаешь.
Кроме того еще ряд ограничений не позволяют выжать больше на современных компьютерах, оснащенных многоядерными процессорами.
Развитие языка остановилось 10 лет назад (не считая сервиспаки, но это скорее правки багов а не развитие)

Бенчмарки я бы с радостью написал, но знаком с .НЕТ довольно поверхносно (в смысле изучал, но серьезных проектов не писал),

От тебя требуется только код, написанный на VB6

а код написанный в vb7-9 аналогично vb6 в 70% случаев выполняется медленнее.

Серьезно?
Код написанный в VB6 аналогично VB7-9 в 100% случаев выдает ошибку компиляции - шутка ли?

Ответить

Номер ответа: 28
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #28 Добавлено: 07.07.08 16:51
Dim iTest As Long, i As Long
Dim mMax As Single, mMin As Single
Dim tArr(1000000) As Single
Randomize Timer
    [b]iTest = timeGetTime [/b]    mMax = 12000000000.45
    mMin = -24000000.098
    lLen = Len(tArr(0))
    For i = 0 To 1000000
        tArr(i) = ((Rnd * mMax) - mMin)
    Next
    MsgBox timeGetTime - iTest

Что это за прикол? Почему не учитывается время не выделение памяти? Или считаешь что оно равно 0?

Вот мой код:

        For j = 0 To 10
            Dim start = DateTime.Now
            Dim MyArr(CInt(1 * 10 ^ j - 1)) As Single
            Dim Random As New Random
            Dim Max As Single = 12000000000.45
            Dim Min As Single = -24000000.098

            For i = 0 To MyArr.Length - 1
                MyArr(i) = (Random.Next * Max) - Min
            Next
            Console.WriteLine("{0} элементов: {1} сек", MyArr.Length, Now.Subtract(start))
        Next
        Console.ReadLine()


Результаты работы:
1 элементов: 00:00:00.0010000 сек
10 элементов: 00:00:00 сек
100 элементов: 00:00:00 сек
1000 элементов: 00:00:00 сек
10000 элементов: 00:00:00 сек
100000 элементов: 00:00:00.0020000 сек
[b]1000000 элементов: 00:00:00.0270000 сек[/b]
10000000 элементов: 00:00:00.2580000 сек
100000000 элементов: 00:00:02.6150000 сек
Дальше не идет - вылетает System.OutOfMemoryException

Если мосмотреть последние 4 теста, видно практически линейное увеличение скорости.

Те 1000000 которые прогонял ты у меня выполняются 0.027 секнд.

Можешь проверить на скоем компьютере, у меня лично VB6 нет, жду пока мне скомпилируют и пришлют программу.

Даже не использую дополнительную оптимизацию в vb6 выйгрыш получается около 100 мс.

Выигрыш... Между чем и чем?

100 мс - что это? На каком времени выигрыш?

Выигрыш 100мс при общем времени 200 мс - это круто, выигрыш 100 мс при общем времени 5 мин - это трата денег работодателя (он бы больше выиграл если бы заплатил не 50 баксов за эту "оптимизацию", а установив процессор, дороже на 50 баксов.

Ответить

Номер ответа: 29
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #29 Добавлено: 07.07.08 16:51
Если мосмотреть последние 4 теста, видно практически линейное увеличение скорости.

тьфу, т.е. линейное увеличение времени, значит скорость обработки одного элемента постоянна

Ответить

Номер ответа: 30
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #30 Добавлено: 07.07.08 17:04

      .NET выгоднее для разработчика, VB6 для пользователя, а производительность программ почти одинаковая.

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам