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

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#1
<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]
 

motogarri

Well-Known Member
17.02.2010
200
4
#2
Народ, на скрипте можно массив чисел сортировать? Есть аналог @Sort?
 
13.03.2009
625
2
#4
Народ, на скрипте можно массив чисел сортировать? Есть аналог @Sort?
грязное, но решение:
Код:
	' временный документ
Dim doc As New NotesDocument( session.CurrentDatabase )
doc.dataToSort = myNumberArray
' evaluate @Sort
Dim sortedArray As Variant
sortedArray = evaluate( doc , {@Sort(dataToSort)}}
 

VladSh

начинающий
Lotus team
11.12.2009
1 248
2
#7
garri
turumbay дал хороший вариант, сам им в основном пользуюсь.

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 492
367
#8
ну ежели до эвалюэйта дошли - то мона и LS2J сортировку забаянить :lovecodeby:
 

StarikStarik2705

Well-Known Member
08.02.2012
103
0
#9
Быстрая Сортировка, хочу узнать как делать её на лотусе.
у кого есть какие идеи или замечания готов выслушать
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
#10
Открываем names.ntf и внимательно изучаем LS-библиотеки.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 492
367
#12
вдогонку - рекурсия для интерпретируемых (скриптовых...) языков не является критичной
а вот для компилируемых - стэк обычно выделяется небольшой, для жвм - тоже можно воткнуться в предел стэка...
потому можно реализовывать "нерекурсивные" варианты, как например 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.03.2009
625
2
#13
рекурсия "выглядит изященее" :icq:
Кстати, насчет изящества: вот как оно выглядит на Scala (источник, трафик(!), PDF )
Код:
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 <)))
}
}
или даже так (источник)
Код:
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 - а почему бы и нет? :)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 492
367
#14
Самый цимес, что на Scala можно писать под домино,
это былоб здорово при нормально ИДЕ для нотусни...
но увы... решать сторонней ИДЕ можно но не упрощает жизнь :)
хотя для ч-л глобального доминошный дизигнер убог и неудобен (ни те контроля версий и нормальной тулзы для сравнения...)

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