16 lines
480 B
Forth
16 lines
480 B
Forth
|
namespace Sanchime.Algrithm.Sort
|
||
|
[<AutoOpen>]
|
||
|
module Bubble =
|
||
|
|
||
|
let rec bsort sorted = function
|
||
|
| [] -> []
|
||
|
| [x] -> [x]
|
||
|
| xs ->
|
||
|
let sxs = xs |> swap sorted
|
||
|
if sxs = xs then xs else sxs |> bsort sorted
|
||
|
// 比较相邻元素,反复交换
|
||
|
and swap sorted = function
|
||
|
| [] -> []
|
||
|
| [x] -> [x]
|
||
|
| x::y::xs ->
|
||
|
if sorted x y then x::(y::xs |> swap sorted) else y::(x::xs |> swap sorted)
|