home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / euphoria / sort.e < prev    next >
Text File  |  1994-01-31  |  950b  |  46 lines

  1.         -------------
  2.         -- Sorting --
  3.         -------------
  4.  
  5. -- Sort a sequence of arbitrary objects into ascending order.
  6.  
  7. -- If you want to change the default ordering of objects in Euphoria
  8. -- write your own compare() function to override the builtin compare,
  9. -- then include this file after it.
  10.  
  11. global function sort(sequence x)
  12. -- Shell sort - will sort any sequence of Euphoria objects
  13.  
  14.     integer gap, j, first, last
  15.     object tempi, tempj
  16.  
  17.     last = length(x)
  18.     gap = floor(last / 3) + 1
  19.     while 1 do
  20.     first = gap + 1
  21.     for i = first to last do
  22.         tempi = x[i]
  23.         j = i - gap
  24.         while 1 do
  25.         tempj = x[j]
  26.         if compare(tempi, tempj) >= 0 then
  27.             j = j + gap
  28.             exit
  29.         end if
  30.         x[j+gap] = tempj
  31.         if j <= gap then
  32.             exit
  33.         end if
  34.         j = j - gap
  35.         end while
  36.         x[j] = tempi
  37.     end for
  38.     if gap = 1 then
  39.         return x
  40.     else
  41.         gap = floor(gap / 3) + 1
  42.     end if
  43.     end while
  44. end function
  45.  
  46.