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 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

Lines changed: 20 additions & 0 deletions
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

Lines changed: 38 additions & 1 deletion
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)

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