diff --git a/.idea/.idea.Algorithm-FSharp/.idea/workspace.xml b/.idea/.idea.Algorithm-FSharp/.idea/workspace.xml
index b3957b2..9287c96 100644
--- a/.idea/.idea.Algorithm-FSharp/.idea/workspace.xml
+++ b/.idea/.idea.Algorithm-FSharp/.idea/workspace.xml
@@ -7,7 +7,13 @@
-
+
+
+
+
+
+
+
@@ -24,6 +30,12 @@
+
+
+
+
+
+
@@ -79,6 +91,12 @@
+
+
+
+
+
+
1660059459924
@@ -87,7 +105,21 @@
1660059459924
-
+
+ 1660059889588
+
+
+
+ 1660059889588
+
+
+ 1660059986664
+
+
+
+ 1660059986664
+
+
@@ -109,8 +141,9 @@
-
-
+
+
+
\ No newline at end of file
diff --git a/Algorithm-FSharp/Algorithm-FSharp.fsproj b/Algorithm-FSharp/Algorithm-FSharp.fsproj
index 03764ea..8a95634 100644
--- a/Algorithm-FSharp/Algorithm-FSharp.fsproj
+++ b/Algorithm-FSharp/Algorithm-FSharp.fsproj
@@ -7,6 +7,8 @@
+
+
diff --git a/Algorithm-FSharp/MergeSort.fs b/Algorithm-FSharp/MergeSort.fs
new file mode 100644
index 0000000..5652b85
--- /dev/null
+++ b/Algorithm-FSharp/MergeSort.fs
@@ -0,0 +1,26 @@
+module Algorithm_FSharp.MergeSort
+
+// 合并有序数列算法
+// merge : 'a list -> 'a list -> 'a list -> 'a list
+// 待合并的有序数列存储在lhs和rhs中,每一步合并后中间结果都存放在res中
+let rec merge lhs rhs res =
+ match (lhs, rhs) with // 判断lhs和rhs是否为空
+ | [], [] -> res // 若两者均为空,直接返回res
+ | [], ys -> res @ ys // 若lhs中的数已经用光,则将rhs追加到res末尾并返回
+ | xs, [] -> res @ xs // 若rhs中的数已经用光,则将lhs追加到res末尾并返回
+ | x::xs, y::ys -> // 若二者均不为空
+ match x < y with // 取出第一个元素,并判断二者的大小关系
+ | true -> merge xs (y::ys) (res @ [x]) // 若lhs的第一个元素小于rhs的第一个元素,则将其取出并放置在res的末尾,递归合并剩余的元素
+ | false -> merge (x::xs) ys (res @ [y]) // 若rhs的第一个元素小于lhs的第一个元素,则将其取出并放置在res的末尾,递归合并剩余的元素
+
+// 归并排序算法的F#实现
+// mergesort : 'a list -> 'a list
+let rec mergesort arr =
+ match arr with // 模式匹配
+ | [] -> [] // 若arr为空或只有一个元素,则它已经有序,直接返回
+ | [single] -> [single]
+ | _ -> // 若arr的元素多于一个
+ let mid = arr.Length / 2 // 计算序列中点的索引
+ let left, right = arr // 从中点切分序列为两部分
+ |> List.splitAt mid
+ merge (mergesort left) (mergesort right) [] // 将两部分分别归并排序,然后合并为有序数列
\ No newline at end of file
diff --git a/Algorithm-FSharp/Program.fs b/Algorithm-FSharp/Program.fs
index df9d4a4..b1e6795 100644
--- a/Algorithm-FSharp/Program.fs
+++ b/Algorithm-FSharp/Program.fs
@@ -1,8 +1,8 @@
// For more information see https://aka.ms/fsharp-console-apps
module Algorithm_FSharp.Program
-open Algorithm_FSharp.QuickSort
+open Algorithm_FSharp.MergeSort
+open Algorithm_FSharp.TestList
// 测试用例
-let myList = [1; 1; 4; 5; 1; 4; 1; 9; 1; 9; 8; 1; 0] // 你是一个一个一个快速排序算法啊啊啊啊啊啊
printfn $"%A{myList
- |> quicksort}"
+ |> mergesort}"
diff --git a/Algorithm-FSharp/TestList.fs b/Algorithm-FSharp/TestList.fs
new file mode 100644
index 0000000..9416c1a
--- /dev/null
+++ b/Algorithm-FSharp/TestList.fs
@@ -0,0 +1,104 @@
+module Algorithm_FSharp.TestList
+// 测试用数据集
+let myList = [
+ 371
+ 42
+ 583
+ 67
+ 201
+ 740
+ 468
+ 424
+ 853
+ 539
+ 158
+ 982
+ 178
+ 644
+ 585
+ 152
+ 820
+ 719
+ 994
+ 43
+ 368
+ 378
+ 95
+ 685
+ 609
+ 153
+ 841
+ 466
+ 214
+ 432
+ 809
+ 499
+ 66
+ 512
+ 652
+ 111
+ 851
+ 98
+ 277
+ 223
+ 922
+ 533
+ 969
+ 407
+ 694
+ 32
+ 36
+ 242
+ 491
+ 99
+ 987
+ 519
+ 336
+ 1000
+ 359
+ 930
+ 892
+ 833
+ 417
+ 981
+ 827
+ 945
+ 195
+ 389
+ 664
+ 601
+ 864
+ 607
+ 911
+ 445
+ 252
+ 681
+ 413
+ 228
+ 77
+ 758
+ 799
+ 620
+ 898
+ 545
+ 110
+ 560
+ 883
+ 107
+ 703
+ 263
+ 148
+ 617
+ 137
+ 628
+ 155
+ 908
+ 598
+ 220
+ 318
+ 877
+ 315
+ 978
+ 645
+ 75
+]
\ No newline at end of file