Skip to content

Commit 35de10a

Browse files
committed
add mergeSort algorithm
1 parent 52d5fe7 commit 35de10a

File tree

1 file changed

+68
-5
lines changed

1 file changed

+68
-5
lines changed

5.mergeSort.md

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,71 @@
3535

3636
![动图演示](res/mergeSort.gif)
3737

38+
## 4. C++代码实现
3839

39-
## 4. JavaScript 代码实现
40+
```cpp
41+
void merge(vector<int> vec, vector<int>::iterator start, vector<int>::iterator mid, vector<int>::iterator end, vector<int> result)
42+
{
43+
int i = 0;
44+
auto leftStart = start;
45+
auto rightStart = mid + 1;
46+
while (leftStart <= mid && rightStart <= end)
47+
{
48+
if (*leftStart < *rightStart)
49+
result[i++] = *(leftStart++);
50+
else
51+
result[i++] = *(rightStart++);
52+
}
53+
while (leftStart <= mid)
54+
{
55+
result[i++] = *(leftStart++);
56+
}
57+
while (rightStart <= end)
58+
{
59+
result[i++] = *(rightStart++);
60+
}
61+
62+
for (int j=0;j<i;j++)
63+
{
64+
cout << ",i=" << i << ",j=" << j << endl;
65+
*(start++) = result[j];
66+
cout << *(start - 1) << endl;
67+
}
68+
}
69+
void mergeSortA(vector<int> vec, vector<int>::iterator start, vector<int>::iterator end, vector<int> result)
70+
{
71+
int mid = 0;
72+
if (end > start)
73+
{
74+
mid = (end - start ) / 2;
75+
//左边排序
76+
mergeSortA(vec, start, start + mid, result);
77+
//右边排序
78+
mergeSortA(vec, start + mid + 1, end, result);
79+
//合并
80+
merge(vec, start, start+mid, end, result);
81+
}
82+
}
83+
84+
vector<int> AlgorithmSort::mergeSort(vector<int> vec)
85+
{
86+
int len = vec.size();
87+
//边界值判定
88+
if (len <= 1)
89+
return vec;
90+
91+
vector<int> result(len);
92+
/*
93+
左边与右边排序,再做归并
94+
*/
95+
mergeSortA(vec, vec.begin(), vec.end()-1, result);
96+
97+
return vec;
98+
}
99+
100+
```
101+
102+
## 5. JavaScript 代码实现
40103
41104
```js
42105
function mergeSort(arr) { // 采用自上而下的递归方法
@@ -72,7 +135,7 @@ function merge(left, right)
72135
}
73136
```
74137

75-
## 5. Python 代码实现
138+
## 6. Python 代码实现
76139

77140
```python
78141
def mergeSort(arr):
@@ -97,7 +160,7 @@ def merge(left,right):
97160
return result
98161
```
99162

100-
## 6. Go 代码实现
163+
## 7. Go 代码实现
101164

102165
```go
103166
func mergeSort(arr []int) []int {
@@ -137,7 +200,7 @@ func merge(left []int, right []int) []int {
137200
}
138201
```
139202

140-
## 7. Java 代码实现
203+
## 8. Java 代码实现
141204

142205
```java
143206
public class MergeSort implements IArraySort {
@@ -187,7 +250,7 @@ public class MergeSort implements IArraySort {
187250
}
188251
```
189252

190-
## 8. PHP 代码实现
253+
## 9. PHP 代码实现
191254

192255
```php
193256
function mergeSort($arr)

0 commit comments

Comments
 (0)