home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / euphoria / example.ex < prev    next >
Text File  |  1994-03-08  |  1KB  |  43 lines

  1. with profile
  2.         -------------------------------------
  3.          -- Example Program from the Manual --
  4.         -------------------------------------
  5.  
  6.  function merge_sort(sequence x)
  7.  -- put x into ascending order using a recursive merge sort
  8.      integer n, mid
  9.      sequence merged, x1,  x2
  10.  
  11.      n = length(x)
  12.      if n = 0 or n = 1 then
  13.          return x  -- trivial case
  14.      end if
  15.  
  16.      mid = floor(n/2)
  17.      x1 = merge_sort(x[1..mid])       -- sort first half of x 
  18.      x2 = merge_sort(x[mid+1..n])     -- sort second half of x
  19.  
  20.      -- merge the two sorted halves into one
  21.      merged = {}
  22.      while length(x1) > 0 and length(x2) > 0 do
  23.          if compare(x1[1], x2[1]) < 0 then
  24.              merged = append(merged, x1[1])
  25.              x1 = x1[2..length(x1)]
  26.          else
  27.              merged = append(merged, x2[1])
  28.              x2 = x2[2..length(x2)]
  29.          end if
  30.      end while
  31.      return merged & x1 & x2  -- merged data plus leftovers
  32.  end function
  33.  
  34.  procedure print_sorted_list()
  35.  -- generate sorted_list from list 
  36.      ? merge_sort( {9, 10, 3, 1, 4, 5, 8, 7, 6, 2} )
  37.      ? merge_sort( {1.5, -9, 1e6, 100} )
  38.      printf(1, "%s, %s, %s\n", merge_sort({"oranges", "apples", "bananas"}))  
  39.  end procedure
  40.  
  41.  print_sorted_list()     -- this command starts the program 
  42. profile
  43.