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 e1b1c66

Browse files
committed
add cplusplus version in shell-sort and merg-sort
1 parent 75a861b commit e1b1c66

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
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>& nums) {
152+
int gap = 1;
153+
while (gap < (int)nums.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 < nums.size(); j += gap) {
159+
for (int k = j; k - gap >= 0 && nums[k] < nums[k - gap]; k -= gap) {
160+
swap(nums[k], nums[k - gap]);
161+
}
162+
}
163+
}
164+
}
165+
}
166+
```

‎5.mergeSort.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,4 +222,69 @@ function merge($left, $right)
222222

223223
return $result;
224224
}
225+
```
226+
227+
## 9. C++ 代码实现
228+
229+
### 9.1 递归版
230+
231+
```cpp
232+
void mergeSort(vector<int>& nums, int l, int r) {
233+
if (r - l <= 1) {
234+
return;
235+
}
236+
int mid = (l + r) / 2;
237+
mergeSort(nums, l, mid);
238+
mergeSort(nums, mid, r);
239+
int index = 0;
240+
int ptrL = l;
241+
int ptrR = mid;
242+
static vector<int>tempary(50000);
243+
while (ptrL != mid && ptrR != r) {
244+
if (nums[ptrL] < nums[ptrR]) {
245+
tempary[index++] = nums[ptrL++];
246+
} else {
247+
tempary[index++] = nums[ptrR++];
248+
}
249+
}
250+
while (ptrL != mid) {
251+
tempary[index++] = nums[ptrL++];
252+
}
253+
while (ptrR != r) {
254+
tempary[index++] = nums[ptrR++];
255+
}
256+
copy(tempary.begin(), tempary.begin() + index, nums.begin() + l);
257+
}
258+
```
259+
260+
### 9.2 迭代版
261+
262+
```cpp
263+
void mergeSort(vector<int>& nums) {
264+
for (int step = 1; step <= nums.size(); step *= 2) {
265+
for (int i = 0; i + step < nums.size(); i += 2 * step) {
266+
int l = i;
267+
int r = min((int)nums.size(), i + step * 2);
268+
int mid = i + step;
269+
int index = 0;
270+
int ptrL = l;
271+
int ptrR = mid;
272+
static vector<int>tempary(50000);
273+
while (ptrL != mid && ptrR != r) {
274+
if (nums[ptrL] < nums[ptrR]) {
275+
tempary[index++] = nums[ptrL++];
276+
} else {
277+
tempary[index++] = nums[ptrR++];
278+
}
279+
}
280+
while (ptrL != mid) {
281+
tempary[index++] = nums[ptrL++];
282+
}
283+
while (ptrR != r) {
284+
tempary[index++] = nums[ptrR++];
285+
}
286+
copy(tempary.begin(), tempary.begin() + index, nums.begin() + l);
287+
}
288+
}
289+
}
225290
```

0 commit comments

Comments
(0)

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