Skip to content

Commit f56cfad

Browse files
authored
Merge pull request #55 from chenshouao/master
add c-plus-plus version‘s shell-sort and merge-sort
2 parents 86ebc4a + 75cb7d6 commit f56cfad

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

4.shellSort.md

+20
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,23 @@ function shellSort($arr)
144144
return $arr;
145145
}
146146
```
147+
148+
## 7. C++ 代码实现
149+
150+
```cpp
151+
void shellSort(vector<int>& arr) {
152+
int gap = 1;
153+
while (gap < (int)arr.size() / 3) {
154+
gap = gap * 3 + 1;
155+
}
156+
for (; gap >= 1; gap /= 3) {
157+
for (int i = 0; i < gap; ++i) {
158+
for (int j = i + gap; j < arr.size(); j += gap) {
159+
for (int k = j; k - gap >= 0 && arr[k] < arr[k - gap]; k -= gap) {
160+
swap(arr[k], arr[k - gap]);
161+
}
162+
}
163+
}
164+
}
165+
}
166+
```

5.mergeSort.md

+38-1
Original file line numberDiff line numberDiff line change
@@ -222,4 +222,41 @@ function merge($left, $right)
222222

223223
return $result;
224224
}
225-
```
225+
```
226+
227+
## 9. C++ 代码实现
228+
229+
```cpp
230+
void merge(vector<int>& arr, int l, int mid, int r) {
231+
int index = 0;
232+
int ptrL = l;
233+
int ptrR = mid;
234+
static vector<int>tempary;
235+
if (arr.size() > tempary.size()) {
236+
tempary.resize(arr.size());
237+
}
238+
while (ptrL != mid && ptrR != r) {
239+
if (arr[ptrL] < arr[ptrR]) {
240+
tempary[index++] = arr[ptrL++];
241+
} else {
242+
tempary[index++] = arr[ptrR++];
243+
}
244+
}
245+
while (ptrL != mid) {
246+
tempary[index++] = arr[ptrL++];
247+
}
248+
while (ptrR != r) {
249+
tempary[index++] = arr[ptrR++];
250+
}
251+
copy(tempary.begin(), tempary.begin() + index, arr.begin() + l);
252+
}
253+
void mergeSort(vector<int>& arr, int l, int r) { // sort the range [l, r) in arr
254+
if (r - l <= 1) {
255+
return;
256+
}
257+
int mid = (l + r) / 2;
258+
mergeSort(arr, l, mid);
259+
mergeSort(arr, mid, r);
260+
merge(arr, l, mid, r);
261+
}
262+
```

0 commit comments

Comments
 (0)