-
-
Notifications
You must be signed in to change notification settings - Fork 48
/
Cycle_Sort.fs
29 lines (28 loc) · 1.07 KB
/
Cycle_Sort.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
namespace Algorithms.Sort
module CycleSort =
let Sort list: 'T [] =
let mutable list = list |> Array.copy
let mutable writes = 0
for index in 0 .. list.Length - 1 do
let mutable value = list.[index]
let mutable pos = index
for i in index + 1 .. list.Length - 1 do
if list.[i] < value then pos <- pos + 1
if pos <> index then
while value = list.[pos] do
pos <- pos + 1
let mutable tmp = list.[pos]
list.[pos] <- value
value <- tmp
writes <- writes + 1
while pos <> index do
pos <- index
for i in index + 1 .. list.Length - 1 do
if list.[i] < value then pos <- pos + 1
while value = list.[pos] do
pos <- pos + 1
tmp <- list.[pos]
list.[pos] <- value
value <- tmp
writes <- writes + 1
list