Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 68df26c

Browse files
committed
feat: add MergeSort
1 parent 29a5561 commit 68df26c

File tree

4 files changed

+162
-18
lines changed

4 files changed

+162
-18
lines changed

‎basic/sort/BubbleSort.java‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
import java.util.Arrays;
2+
13
public class BubbleSort {
24
private static void swap(int[] nums, int i, int j) {
35
int t = nums[i];
46
nums[i] = nums[j];
57
nums[j] = t;
68
}
79

8-
public static void main(String[] args) {
9-
int[] nums = {1, 2, 7, 9, 5, 8};
10+
private static void bubbleSort(int[] nums) {
1011
boolean hasChange = true;
1112
for (int i = 0; i < nums.length - 1 && hasChange; ++i) {
1213
hasChange = false;
@@ -18,4 +19,10 @@ public static void main(String[] args) {
1819
}
1920
}
2021
}
22+
23+
public static void main(String[] args) {
24+
int[] nums = {1, 2, 7, 9, 5, 8};
25+
bubbleSort(nums);
26+
System.out.println(Arrays.toString(nums));
27+
}
2128
}

‎basic/sort/InsertionSort.java‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
1-
public class InsertionSort {
2-
3-
public static void main(String[] args) {
4-
int[] nums = { 1, 2, 7, 9, 5, 8 };
1+
import java.util.Arrays;
52

3+
public class InsertionSort {
4+
private static void insertionSort(int[] nums) {
65
for (int i = 1, j, current; i < nums.length; ++i) {
76
current = nums[i];
8-
for (j = i - 1; j >=0 && nums[j] > current; --j) {
7+
for (j = i - 1; j >=0 && nums[j] > current; --j) {
98
nums[j + 1] = nums[j];
109
}
1110
nums[j + 1] = current;
1211
}
1312
}
13+
14+
public static void main(String[] args) {
15+
int[] nums = { 1, 2, 7, 9, 5, 8 };
16+
insertionSort(nums);
17+
System.out.println(Arrays.toString(nums));
18+
}
1419
}

‎basic/sort/MergeSort.java‎

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import java.util.Arrays;
2+
3+
public class MergeSort {
4+
5+
private static void merge(int[] nums, int low, int mid, int high, int[] temp) {
6+
int i = low, j = mid + 1, k = low;
7+
while (k <= high) {
8+
if (i > mid) {
9+
temp[k++] = nums[j++];
10+
} else if (j > high) {
11+
temp[k++] = nums[i++];
12+
} else if (nums[i] <= nums[j]) {
13+
temp[k++] = nums[i++];
14+
} else {
15+
temp[k++] = nums[j++];
16+
}
17+
}
18+
19+
for (i = low; i <= high; ++i) {
20+
nums[i] = temp[i];
21+
}
22+
}
23+
24+
private static void mergeSort(int[] nums, int low, int high, int[] temp) {
25+
if (low >= high) {
26+
return;
27+
}
28+
int mid = low + ((high - low) >> 1);
29+
mergeSort(nums, low, mid, temp);
30+
mergeSort(nums, mid + 1, high, temp);
31+
merge(nums, low, mid, high, temp);
32+
}
33+
34+
private static void mergeSort(int[] nums) {
35+
int[] temp = new int[nums.length];
36+
mergeSort(nums, 0, nums.length - 1, temp);
37+
}
38+
39+
public static void main(String[] args) {
40+
int[] nums = {1, 2, 7, 4, 5, 3};
41+
mergeSort(nums);
42+
System.out.println(Arrays.toString(nums));
43+
}
44+
}

‎basic/sort/README.md‎

Lines changed: 99 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,33 @@
77
### 代码示例
88

99
```java
10-
for (int i = 0; i < nums.length - 1; ++i) {
11-
for (int j = 0; j < nums.length - 1 - i; ++j) {
12-
if (nums[j] > nums[j + 1]) {
13-
swap(nums, j, j + 1);
10+
import java.util.Arrays;
11+
12+
public class BubbleSort {
13+
private static void swap(int[] nums, int i, int j) {
14+
int t = nums[i];
15+
nums[i] = nums[j];
16+
nums[j] = t;
17+
}
18+
19+
private static void bubbleSort(int[] nums) {
20+
boolean hasChange = true;
21+
for (int i = 0; i < nums.length - 1 && hasChange; ++i) {
22+
hasChange = false;
23+
for (int j = 0; j < nums.length - 1 - i; ++j) {
24+
if (nums[j] > nums[j + 1]) {
25+
swap(nums, j, j + 1);
26+
hasChange = true;
27+
}
28+
}
1429
}
1530
}
31+
32+
public static void main(String[] args) {
33+
int[] nums = {1, 2, 7, 9, 5, 8};
34+
bubbleSort(nums);
35+
System.out.println(Arrays.toString(nums));
36+
}
1637
}
1738
```
1839

@@ -37,17 +58,29 @@ for (int i = 0; i < nums.length - 1; ++i) {
3758
- 在冒泡排序中,经过每一轮的排序处理后,数组后端的数是排好序的。
3859
- 在插入排序中,经过每一轮的排序处理后,数组前端的数是拍好序的。
3960

40-
插入排序算法的基本思想是:不断将尚未排好序的数插入到已经排好序的部分。
61+
插入排序的算法思想是:不断将尚未排好序的数插入到已经排好序的部分。
4162

4263
### 代码示例
4364

4465
```java
45-
for (int i = 1, j, current; i < nums.length; ++i) {
46-
current = nums[i];
47-
for (j = i - 1; j >=0 && nums[j] > current; --j) {
48-
nums[j + 1] = nums[j];
66+
import java.util.Arrays;
67+
68+
public class InsertionSort {
69+
private static void insertionSort(int[] nums) {
70+
for (int i = 1, j, current; i < nums.length; ++i) {
71+
current = nums[i];
72+
for (j = i - 1; j >= 0 && nums[j] > current; --j) {
73+
nums[j + 1] = nums[j];
74+
}
75+
nums[j + 1] = current;
76+
}
77+
}
78+
79+
public static void main(String[] args) {
80+
int[] nums = { 1, 2, 7, 9, 5, 8 };
81+
insertionSort(nums);
82+
System.out.println(Arrays.toString(nums));
4983
}
50-
nums[j + 1] = current;
5184
}
5285
```
5386

@@ -61,4 +94,59 @@ for (int i = 1, j, current; i < nums.length; ++i) {
6194
2. 给定的数组按照逆序排列:需要进行 `n*(n-1)/2` 次比较,时间复杂度为 O(n^2),这是最坏的情况。
6295
3. 给定的数组杂乱无章:在这种情况下,平均时间复杂度是 O(n^2)。
6396

64-
因此,时间复杂度是 O(n^2),这也是一种稳定的排序算法。
97+
因此,时间复杂度是 O(n^2),这也是一种稳定的排序算法。
98+
99+
## 归并排序
100+
101+
归并排序的核心思想是分治,把一个复杂问题拆分成若干个子问题来求解。
102+
103+
归并排序的算法思想是:把数组从中间划分为两个子数组,一直递归地把子数组划分成更小的数组,直到子数组里面只有一个元素的时候开始排序。排序的方法就是按照大小顺序合并两个元素。接着依次按照递归的顺序返回,不断合并排好序的数组,直到把整个数组排好序。
104+
105+
### 代码示例
106+
107+
```java
108+
import java.util.Arrays;
109+
110+
public class MergeSort {
111+
112+
private static void merge(int[] nums, int low, int mid, int high, int[] temp) {
113+
int i = low, j = mid + 1, k = low;
114+
while (k <= high) {
115+
if (i > mid) {
116+
temp[k++] = nums[j++];
117+
} else if (j > high) {
118+
temp[k++] = nums[i++];
119+
} else if (nums[i] <= nums[j]) {
120+
temp[k++] = nums[i++];
121+
} else {
122+
temp[k++] = nums[j++];
123+
}
124+
}
125+
126+
for (i = low; i <= high; ++i) {
127+
nums[i] = temp[i];
128+
}
129+
}
130+
131+
private static void mergeSort(int[] nums, int low, int high, int[] temp) {
132+
if (low >= high) {
133+
return;
134+
}
135+
int mid = low + ((high - low) >> 1);
136+
mergeSort(nums, low, mid, temp);
137+
mergeSort(nums, mid + 1, high, temp);
138+
merge(nums, low, mid, high, temp);
139+
}
140+
141+
private static void mergeSort(int[] nums) {
142+
int[] temp = new int[nums.length];
143+
mergeSort(nums, 0, nums.length - 1, temp);
144+
}
145+
146+
public static void main(String[] args) {
147+
int[] nums = {1, 2, 7, 4, 5, 3};
148+
mergeSort(nums);
149+
System.out.println(Arrays.toString(nums));
150+
}
151+
}
152+
```

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /