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

  • Автор темы Omh
  • Дата начала
O

Omh

<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]
 
M

motogarri

Народ, на скрипте можно массив чисел сортировать? Есть аналог @Sort?
 
T

turumbay

Народ, на скрипте можно массив чисел сортировать? Есть аналог @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 797
158
BIT
232
garri
turumbay дал хороший вариант, сам им в основном пользуюсь.

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
ну ежели до эвалюэйта дошли - то мона и LS2J сортировку забаянить :lovecodeby:
 
S

StarikStarik2705

Быстрая Сортировка, хочу узнать как делать её на лотусе.
у кого есть какие идеи или замечания готов выслушать
 
N

nvyush

Открываем names.ntf и внимательно изучаем LS-библиотеки.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
вдогонку - рекурсия для интерпретируемых (скриптовых...) языков не является критичной
а вот для компилируемых - стэк обычно выделяется небольшой, для жвм - тоже можно воткнуться в предел стэка...
потому можно реализовывать "нерекурсивные" варианты, как например (взял первое что попалось :icq: )
есть языки, в кот. рекурсия является "нормой"
ну и предпосылки для выбора:
LS - интерпретируемый язык
рекурсия "выглядит изященее" :)
для java возможно изменение размера стэка если много вложенных вызовов (просто надо помнить об этом)
 
T

turumbay

рекурсия "выглядит изященее" :icq:
Кстати, насчет изящества: вот как оно выглядит на Scala ( )
Код:
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)
}

Проблема нехватки стека во многих случаях довольно изящно решается при помощи т.н.
Самый цимес, что на Scala можно писать под домино, ибо оно компилируется в байт-код java и выполняется в jvm. Бинарная совместимость с java позволяет использовать любые java библиотеки, в т.ч. lotus.domino.*
OSGI проект на Scala под Domino xWork Server - а почему бы и нет? :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
Самый цимес, что на Scala можно писать под домино,
это былоб здорово при нормально ИДЕ для нотусни...
но увы... решать сторонней ИДЕ можно но не упрощает жизнь :)
хотя для ч-л глобального доминошный дизигнер убог и неудобен (ни те контроля версий и нормальной тулзы для сравнения...)

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!