Skip to content

Commit 776ebf6

Browse files
author
qq862
committed
c
1 parent 88c178b commit 776ebf6

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

排序/MergeSort.java

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package 排序;
2+
3+
public class MergeSort {
4+
5+
// 主函数,供外部调用的归并排序方法
6+
public static void mergeSort(int[] arr) {
7+
if (arr.length < 2) {
8+
return; // 数组长度小于2,直接返回
9+
}
10+
int mid = arr.length / 2; // 找到数组的中间位置
11+
int[] left = new int[mid];//设定两个数组的容量
12+
int[] right = new int[arr.length - mid];
13+
14+
// 将数组分成左右两个子数组,并且逐一填入
15+
for (int i = 0; i < mid; i++) {
16+
left[i] = arr[i];
17+
}
18+
for (int i = mid; i < arr.length; i++) {
19+
right[i - mid] = arr[i];
20+
}
21+
22+
// 递归地对左右子数组进行排序
23+
mergeSort(left);
24+
mergeSort(right);
25+
26+
// 合并左右两个有序子数组
27+
merge(arr, left, right);
28+
}
29+
30+
// 合并两个有序数组的方法
31+
private static void merge(int[] arr, int[] left, int[] right) {
32+
int i = 0, j = 0, k = 0;
33+
//在左和右数组消耗完前,比较大小并且插入arr
34+
while (i < left.length && j < right.length) {
35+
if (left[i] <= right[j]) {
36+
arr[k++] = left[i++]; //i,k加上1
37+
} else {
38+
arr[k++] = right[j++];
39+
}
40+
}
41+
// 将剩余元素拷贝到arr数组中
42+
while (i < left.length) {
43+
arr[k++] = left[i++];
44+
}
45+
while (j < right.length) {
46+
arr[k++] = right[j++];
47+
}
48+
}
49+
50+
51+
}

排序/main.java

+10
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,16 @@ public static void main(String[] args){
2626

2727
ShellSort.shellsort(arrays04);
2828

29+
int[] array04 = new int[] { 9, 7, 8, 6, 5, 4, 3, 2, 10 };
30+
31+
MergeSort.mergeSort(array04);
32+
for(int t=0; t< array04.length;t++)
33+
{ System.out.println(array04[t]);}
34+
35+
36+
37+
38+
2939

3040

3141

0 commit comments

Comments
 (0)