Skip to content

Commit a8b5de4

Browse files
committed
Add C#归并排序算法
1 parent 62e0009 commit a8b5de4

2 files changed

Lines changed: 92 additions & 1 deletion

File tree

‎DotNetGuidePractice/HelloDotNetGuide/Program.cs‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ static void Main(string[] args)
1111

1212
#region 常见算法
1313

14-
希尔排序算法.ShellSortRun();
14+
归并排序算法.MergeSortRun();
15+
//希尔排序算法.ShellSortRun();
1516
//插入排序算法.InsertionSortRun();
1617
//快速排序算法.QuickSortRun();
1718
//冒泡排序算法.RecursiveBubbleSortRun();
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
namespace HelloDotNetGuide.常见算法
2+
{
3+
public class 归并排序算法
4+
{
5+
public static void MergeSort(int[] arr, int left, int right)
6+
{
7+
if (left < right)
8+
{
9+
// 计算中间索引
10+
int mid = (left + right) / 2;
11+
12+
// 对左半部分数组进行归并排序
13+
MergeSort(arr, left, mid);
14+
15+
// 对右半部分数组进行归并排序
16+
MergeSort(arr, mid + 1, right);
17+
18+
// 合并两个有序数组
19+
Merge(arr, left, mid, right);
20+
}
21+
}
22+
23+
public static void Merge(int[] arr, int left, int mid, int right)
24+
{
25+
int n1 = mid - left + 1; // 左半部分数组的长度
26+
int n2 = right - mid; // 右半部分数组的长度
27+
28+
// 创建临时数组
29+
int[] leftArr = new int[n1];
30+
int[] rightArr = new int[n2];
31+
32+
// 将数据拷贝到临时数组
33+
for (int i = 0; i < n1; ++i)
34+
{
35+
leftArr[i] = arr[left + i];
36+
}
37+
38+
for (int j = 0; j < n2; ++j)
39+
{
40+
rightArr[j] = arr[mid + 1 + j];
41+
}
42+
43+
// 合并两个有序数组
44+
int k = left; // 初始化合并后的数组索引
45+
int p = 0; // 初始化左半部分数组的索引
46+
int q = 0; // 初始化右半部分数组的索引
47+
48+
while (p < n1 && q < n2)
49+
{
50+
if (leftArr[p] <= rightArr[q])
51+
{
52+
arr[k] = leftArr[p];
53+
p++;
54+
}
55+
else
56+
{
57+
arr[k] = rightArr[q];
58+
q++;
59+
}
60+
k++;
61+
}
62+
63+
// 复制左半部分数组的剩余元素
64+
while (p < n1)
65+
{
66+
arr[k] = leftArr[p];
67+
p++;
68+
k++;
69+
}
70+
71+
// 复制右半部分数组的剩余元素
72+
while (q < n2)
73+
{
74+
arr[k] = rightArr[q];
75+
q++;
76+
k++;
77+
}
78+
}
79+
80+
public static void MergeSortRun()
81+
{
82+
int[] array = { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3 };
83+
Console.WriteLine("排序前数组:" + string.Join(", ", array));
84+
85+
MergeSort(array, 0, array.Length - 1);
86+
87+
Console.WriteLine("排序后数组:" + string.Join(", ", array));
88+
}
89+
}
90+
}

0 commit comments

Comments
 (0)