Guest User

Untitled

a guest
Jul 7th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. dim shared as uinteger ints(100000)
  2. dim shared as uinteger sorted(100000)
  3.  
  4. declare function mergeandcount(lower as integer, upper as integer) as uinteger
  5.  
  6. dim i as uinteger
  7.  
  8. open "IntegerArray.txt" for input as #1
  9.  
  10. i = 0
  11. while not eof(1)
  12.     input #1, ints(i)
  13.     i += 1
  14. wend
  15.  
  16. close #1
  17.  
  18.  
  19.  
  20. print mergeandcount(0, 99999)
  21.  
  22. open "output.txt" for output as #2
  23. for i = 0 to 99999
  24.     'print ints(i);
  25.     print #2, ints(i)
  26. next i
  27. close #2
  28.  
  29. sleep
  30.  
  31. function mergeandcount(lower as integer, upper as integer) as uinteger
  32.     dim count as uinteger
  33.     dim lowercount as uinteger
  34.     dim uppercount as uinteger
  35.     dim middle as uinteger
  36.     dim as uinteger i, j, k
  37.    
  38.     middle = int((lower+upper)/2)
  39.    
  40.     'print lower, upper, middle
  41.     'sleep 500
  42.    
  43.     'Trivial endcase
  44.     if lower >= upper then return 0
  45.    
  46.     'Recursive calls
  47.     lowercount = mergeandcount(lower, middle)
  48.     uppercount = mergeandcount(middle+1, upper)
  49.    
  50.     'Merge sort & count
  51.  
  52.    
  53. '    print "lower list: " & lower & " to " & middle
  54. '    for i = lower to middle
  55. '        print ints(i) & " ";
  56. '    next i
  57. '    print
  58. '    print "upper list: " & middle+1 & " to " & upper
  59. '    for j = middle+1 to upper
  60. '        print ints(j) & " ";
  61. '    next j
  62. '    print
  63. '    print
  64.    
  65.    
  66.     i = lower
  67.     j = middle+1
  68.     for k = lower to upper
  69.         if i > middle then
  70.             sorted(k) = ints(j)
  71.             j += 1
  72.         elseif j > upper then
  73.             sorted(k) = ints(i)
  74.             i += 1
  75.         else
  76.             if ints(i) < ints(j) then
  77.                 sorted(k) = ints(i)
  78.                 i += 1
  79.             else
  80.                 sorted(k) = ints(j)
  81.                 count += (middle - (i-1))
  82.                 j += 1
  83.             end if
  84.         end if
  85.        
  86.         'print sorted(k);
  87.     next k
  88.     'print
  89.    
  90.     'Copy back to ints
  91.     for k = lower to upper
  92.         ints(k) = sorted(k)
  93.         'print sorted(k) & " ";
  94.     next k
  95.     'print
  96.    
  97.     'print "Inversions: " & count
  98.     'print "Lower array inversions: " & lowercount
  99.     'print "Upper array inversions: " & uppercount
  100.    
  101.     'print "Total inversions: " & count + lowercount + uppercount
  102.    
  103.    
  104.     'sleep
  105.    
  106.     count += lowercount + uppercount
  107.    
  108.     return count
  109. end function
Add Comment
Please, Sign In to add comment