Advertisement
Guest User

Untitled

a guest
May 2nd, 2015
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 2.00 KB | None | 0 0
  1. open System
  2. open System.Threading
  3. open System.Diagnostics
  4.  
  5. let Merge (arr:int[], left:int, middle:int, right:int) =
  6.     let mutable m1 = middle - left + 2
  7.     let mutable m2 = right - middle + 1
  8.     let L = Array.create m1 0
  9.     let R = Array.create m2 0
  10.     m1<-m1-1
  11.     m2<-m2-1
  12.     for i = 0 to m1-1 do L.[i] <- arr.[i+left]
  13.     for i=0 to m2-1 do R.[i] <- arr.[i+middle+1]
  14.     L.[m1]<-System.Int32.MaxValue
  15.     R.[m2]<-System.Int32.MaxValue
  16.     let mutable i = 0
  17.     let mutable j = 0
  18.  
  19.     for x=left to right do
  20.      if (L.[i]<R.[j]) then do
  21.       arr.[x]<-L.[i]
  22.       i<-i+1
  23.      else do
  24.       arr.[x]<-R.[j]
  25.       j<-j+1
  26. 0
  27.  
  28. let rec Sort (threadMaxNumber:int , arr: int[], left:int, right:int) =
  29.     if (left < right && threadMaxNumber>1) then do
  30.        let middle = left + (right-left)/2
  31.        let t = new Thread(ThreadStart(fun _ -> Sort (threadMaxNumber/2, arr, left, middle)))
  32.        t.Start()
  33.        Sort(threadMaxNumber/2, arr, middle+1, right)
  34.        t.Join()
  35.        Merge(arr, left, middle, right)
  36.         else if (left<right) then do
  37.         let middle = left + (right-left)/2
  38.         Sort (threadMaxNumber/2, arr, left, middle)
  39.         Sort(threadMaxNumber/2, arr, middle+1, right)
  40.         Merge(arr, left, middle, right)
  41. 0
  42.  
  43.  
  44. let checkSort (arr:int[], length:int) =
  45.    let mutable a = 1
  46.    for x=0 to length-2 do
  47.     if (arr.[x]>arr.[x+1]) then a<-0
  48.    if a=1 then printfn "Sorting is correct." else printfn "Sorting is NOT correct."
  49.  
  50. let createArr (degree:float, threadNumber : int) =
  51.    let length = Int32.Parse(System.Math.Pow(10.0, degree).ToString())
  52.    let rnd = new System.Random(0)
  53.    let arr = Array.init length (fun i -> rnd.Next(0, length))
  54.    Sort(4, arr, 0 , length-1)
  55.    checkSort(arr, length)
  56.    arr
  57.  
  58.  
  59. [<EntryPoint>]
  60. let main argv =
  61.    
  62.     0 // return an integer exit code
  63.  
  64. //[<TestCase (6.0,1, Result = "Sorting is correct")>]
  65. //[<TestCase (7.0,4, Result = "Sorting is correct")>]
  66. //let ``Test`` (d : float, t : int) =
  67.   //createArr d t
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement