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

Быстрая сортировка Хоора
Нужно отсортировать по возрастанию элементы массива (вектора) y1, длиной h7
Внутри процедуры используются два вспомогательных массива, y71 и y72

proc hoaresort
parameters y1,h7

declare y71[100], y72[100]

w=1
y71[1]=1
y72[1]=h7
do whil .t.
p=y71[w]
q=y72[w]
w=w-1
do whil .t.
i=p
j=q
a=y1[int((p+q)/2)]
do whil .t.
do whil y1[i]<a
i=i+1
endd
do whil y1[j]>a
j=j-1
endd
if i>j
exit
endi
ww=y1[i]
y1[i]=y1[j]
y1[j]=ww
i=i+1
j=j-1
if i>j
exit
endi
endd
if j-p>=q-i
if p<j
w=w+1
y71[w]=p
y72[w]=j
endi
p=i
else
if i<q
w=w+1
y71[w]=i
y72[w]=q
endi
q=j
endi
if p>=q
exit
endi
endd
if w=0
exit
endi
endd

retu
* конец процедуры hoaresort

В начало