Сортировка массива

Тема в разделе "Библиотеки скриптов", создана пользователем Omh, 4 июн 2008.

  1. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='ls'>Sub ArraySortSub(Array As Variant, SortOrder As Integer)
    On Error Goto Errh

    If Isempty(Array) Then Exit Sub
    If Not Isarray(Array) Then Exit Sub

    Dim done As Variant
    Dim Jump As Long
    Dim i As Long
    Dim j As Long
    Dim n As Long
    Dim x As Long
    Dim Temp As Variant

    Dim Val_i As Variant
    Dim Val_j As Variant
    Dim Swap As Boolean

    x = Lbound(Array)
    n = Ubound(Array)
    Jump = n

    Do While Jump > 1
    Jump = Jump \ 2
    Do
    done = True
    For j = x To n - Jump
    i = j + Jump

    Val_i = Array(i)
    Val_j = Array(j)

    Select Case SortOrder
    Case SORT_ASC: Swap = Val_j > Val_i
    Case SORT_DSC: Swap = Val_j < Val_i
    Case Else: Swap = Val_j > Val_i
    End Select

    If Swap Then
    Temp = Array(i)
    Array(i) = Array(j)
    Array(j) = Temp
    done = False
    End If

    Next
    Loop Until done
    Loop

    Exit Sub
    Errh:
    Call ErrHandler
    Exit Sub
    End Sub[/CODE]
     
  2. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Народ, на скрипте можно массив чисел сортировать? Есть аналог @Sort?
     
  3. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    нет, или собакой или j2ls
     
  4. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    грязное, но решение:
    Код (Text):
        ' временный документ
    Dim doc As New NotesDocument( session.CurrentDatabase )
    doc.dataToSort = myNumberArray
    ' evaluate @Sort
    Dim sortedArray As Variant
    sortedArray = evaluate( doc , {@Sort(dataToSort)}}
     
  5. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    turumbay - читер
     
  6. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Базовый курс по программированию
    Правда для Pascal, но алгоритмы применимы и в скрипте
     
  7. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    garri
    turumbay дал хороший вариант, сам им в основном пользуюсь.

    Если разбираться, то это сюда; можно глянуть визуально работу некоторых алгоритмов.
    У каждого алгоритма своя область применения.
    Наиболее распространена QSort; при желании её код, в т.ч. и на VB, можно найти в инете.
    Ещё неплохая сортировка Шелла, но она сложная в реализации (я когда-то пытался писать по Кнуту на Делфе, но плюнул )) ).
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    ну ежели до эвалюэйта дошли - то мона и LS2J сортировку забаянить :lovecodeby:
     
  9. StarikStarik2705

    StarikStarik2705 Well-Known Member

    Регистрация:
    8 фев 2012
    Сообщения:
    103
    Симпатии:
    0
    Быстрая Сортировка, хочу узнать как делать её на лотусе.
    у кого есть какие идеи или замечания готов выслушать
     
  10. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Открываем names.ntf и внимательно изучаем LS-библиотеки.
     
  11. StarikStarik2705

    StarikStarik2705 Well-Known Member

    Регистрация:
    8 фев 2012
    Сообщения:
    103
    Симпатии:
    0
    спасибо , всё нашёл но написано пока для меня так что ничего не понятно. Хотя скопировал всё очень даже быстро сортирует)
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    вдогонку - рекурсия для интерпретируемых (скриптовых...) языков не является критичной
    а вот для компилируемых - стэк обычно выделяется небольшой, для жвм - тоже можно воткнуться в предел стэка...
    потому можно реализовывать "нерекурсивные" варианты, как например http://www.cyberforum.ru/java/thread80541.html (взял первое что попалось :icq: )
    есть языки, в кот. рекурсия является "нормой" http://learnyousomeerlang.com/recursion
    ну и предпосылки для выбора:
    LS - интерпретируемый язык
    рекурсия "выглядит изященее" :)
    для java возможно изменение размера стэка http://www-10.lotus.com/ldd/dominowiki.nsf/dx/javastacksize если много вложенных вызовов (просто надо помнить об этом)
     
  13. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Кстати, насчет изящества: вот как оно выглядит на Scala (источник, трафик(!), PDF )
    Код (Text):
    def sort(xs: Array[Int]): Array[Int] = {
    if (xs.length <= 1) xs
    else {
    val pivot = xs(xs.length / 2)
    Array.concat(
    sort(xs filter (pivot >)),
    xs filter (pivot ==),
    sort(xs filter (pivot <)))
    }
    }
    или даже так (источник)
    Код (Text):
    def qsort: List[Int] => List[Int] = {
    case Nil => Nil
    case pivot :: tail =>
    val (smaller, rest) = tail.partition(_ < pivot)
    qsort(smaller) ::: pivot :: qsort(rest)
    }
    Проблема нехватки стека во многих случаях довольно изящно решается при помощи т.н. tail call
    Самый цимес, что на Scala можно писать под домино, ибо оно компилируется в байт-код java и выполняется в jvm. Бинарная совместимость с java позволяет использовать любые java библиотеки, в т.ч. lotus.domino.*
    OSGI проект на Scala под Domino xWork Server - а почему бы и нет? :)
     
  14. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    это былоб здорово при нормально ИДЕ для нотусни...
    но увы... решать сторонней ИДЕ можно но не упрощает жизнь :)
    хотя для ч-л глобального доминошный дизигнер убог и неудобен (ни те контроля версий и нормальной тулзы для сравнения...)

    остальной кусок ответа уехал в профильную тему.
     
Загрузка...

Поделиться этой страницей