Skip to content

Commit 1945df5

Browse files
daliang111willrlzhangmaolonglong
authored
feat: selection sort, merge sort in cpp (doocs#557)
Co-authored-by: willrlzhang <willrlzhang@tencent.com> Co-authored-by: MaoLongLong <382084620@qq.com>
1 parent 1af1b00 commit 1945df5

File tree

4 files changed

+249
-4
lines changed

4 files changed

+249
-4
lines changed

basic/sorting/MergeSort/Main.cpp

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#include <iostream>
2+
#include <vector>
3+
4+
using namespace std;
5+
6+
void printvec( const vector<int> &vec, const string &strbegin = "", const string &strend = "" )
7+
{
8+
cout << strbegin << endl;
9+
for ( auto val : vec )
10+
{
11+
cout << val << "\t";
12+
}
13+
14+
cout << endl;
15+
cout << strend << endl;
16+
}
17+
18+
19+
void mergesort( vector<int> & vec, int left, int right )
20+
{
21+
if ( left >= right )
22+
{
23+
return;
24+
}
25+
26+
int mid = left + (right - left) / 2;
27+
mergesort( vec, left, mid );
28+
mergesort( vec, mid + 1, right );
29+
30+
int i = left;
31+
int j = mid + 1;
32+
int k = 0;
33+
vector<int> vecTmp;
34+
while ( i <= mid && j <= right )
35+
{
36+
if ( vec[i] < vec[j] )
37+
{
38+
vecTmp.push_back( vec[i] );
39+
i++;
40+
}else {
41+
vecTmp.push_back( vec[j] );
42+
j++;
43+
}
44+
}
45+
46+
while ( i <= mid )
47+
{
48+
vecTmp.push_back( vec[i] );
49+
i++;
50+
}
51+
52+
while ( j <= right )
53+
{
54+
vecTmp.push_back( vec[j] );
55+
j++;
56+
}
57+
58+
for ( int i = left; i <= right; i++ )
59+
{
60+
vec[i] = vecTmp[i - left];
61+
}
62+
63+
return;
64+
}
65+
66+
67+
int main( void )
68+
{
69+
vector<int> vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
70+
printvec( vec );
71+
mergesort( vec, 0, vec.size() - 1 );
72+
printvec( vec, "after insert sort" );
73+
return(0);
74+
}

basic/sorting/MergeSort/README.md

+82-4
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def merge_sort(nums, left, right):
101101
while j <= right:
102102
tmp.append(nums[j])
103103
j += 1
104-
104+
105105
j = 0
106106
for i in range(left, right + 1):
107107
nums[i] = tmp[j]
@@ -119,7 +119,7 @@ import java.util.Scanner;
119119

120120
public class Main {
121121
private static int[] tmp = new int[100010];
122-
122+
123123
public static void main(String[] args) {
124124
Scanner sc = new Scanner(System.in);
125125
int n = sc.nextInt();
@@ -132,7 +132,7 @@ public class Main {
132132
System.out.printf("%d ", nums[i]);
133133
}
134134
}
135-
135+
136136
public static void mergeSort(int[] nums, int left, int right) {
137137
if (left >= right) {
138138
return;
@@ -179,7 +179,7 @@ function mergeSort(nums, left, right) {
179179
if (left >= right) {
180180
return;
181181
}
182-
182+
183183
const mid = (left + right) >> 1;
184184
mergeSort(nums, left, mid);
185185
mergeSort(nums, mid + 1, right);
@@ -272,5 +272,83 @@ func main() {
272272
}
273273
```
274274

275+
### **C++**
276+
277+
```cpp
278+
#include <iostream>
279+
#include <vector>
280+
281+
using namespace std;
282+
283+
void printvec( const vector<int> &vec, const string &strbegin = "", const string &strend = "" )
284+
{
285+
cout << strbegin << endl;
286+
for ( auto val : vec )
287+
{
288+
cout << val << "\t";
289+
}
290+
291+
cout << endl;
292+
cout << strend << endl;
293+
}
294+
295+
296+
void mergesort( vector<int> & vec, int left, int right )
297+
{
298+
if ( left >= right )
299+
{
300+
return;
301+
}
302+
303+
int mid = left + (right - left) / 2;
304+
mergesort( vec, left, mid );
305+
mergesort( vec, mid + 1, right );
306+
307+
int i = left;
308+
int j = mid + 1;
309+
int k = 0;
310+
vector<int> vecTmp;
311+
while ( i <= mid && j <= right )
312+
{
313+
if ( vec[i] < vec[j] )
314+
{
315+
vecTmp.push_back( vec[i] );
316+
i++;
317+
}else {
318+
vecTmp.push_back( vec[j] );
319+
j++;
320+
}
321+
}
322+
323+
while ( i <= mid )
324+
{
325+
vecTmp.push_back( vec[i] );
326+
i++;
327+
}
328+
329+
while ( j <= right )
330+
{
331+
vecTmp.push_back( vec[j] );
332+
j++;
333+
}
334+
335+
for ( int i = left; i <= right; i++ )
336+
{
337+
vec[i] = vecTmp[i - left];
338+
}
339+
340+
return;
341+
}
342+
343+
344+
int main( void )
345+
{
346+
vector<int> vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
347+
printvec( vec );
348+
mergesort( vec, 0, vec.size() - 1 );
349+
printvec( vec, "after insert sort" );
350+
return(0);
351+
}
352+
```
275353
276354
<!-- tabs:end -->

basic/sorting/SelectionSort/README.md

+49
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,55 @@ func main() {
9090
}
9191
```
9292

93+
### **C++**
94+
95+
```cpp
96+
#include <iostream>
97+
#include <vector>
98+
99+
using namespace std;
100+
101+
void printvec( const vector<int> &vec, const string &strbegin = "", const string &strend = "" )
102+
{
103+
cout << strbegin << endl;
104+
for ( auto val : vec )
105+
{
106+
cout << val << "\t";
107+
}
108+
109+
cout << endl;
110+
cout << strend << endl;
111+
}
112+
113+
114+
void selectsort( vector<int> & vec )
115+
{
116+
for ( int i = 0; i < vec.size() - 1; i++ )
117+
{
118+
int minidx = i;
119+
for ( int j = i + 1; j < vec.size(); j++ )
120+
{
121+
if ( vec[minidx] > vec[j] )
122+
{
123+
minidx = j;
124+
}
125+
}
126+
127+
swap( vec[i], vec[minidx] );
128+
}
129+
}
130+
131+
132+
int main( void )
133+
{
134+
vector<int> vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
135+
printvec( vec );
136+
selectsort( vec );
137+
printvec( vec, "after insert sort" );
138+
return(0);
139+
}
140+
```
141+
93142
<!-- tabs:end -->
94143
95144
## 算法分析
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#include <iostream>
2+
#include <vector>
3+
4+
using namespace std;
5+
6+
void printvec( const vector<int> &vec, const string &strbegin = "", const string &strend = "" )
7+
{
8+
cout << strbegin << endl;
9+
for ( auto val : vec )
10+
{
11+
cout << val << "\t";
12+
}
13+
14+
cout << endl;
15+
cout << strend << endl;
16+
}
17+
18+
19+
void selectsort( vector<int> & vec )
20+
{
21+
for ( int i = 0; i < vec.size() - 1; i++ )
22+
{
23+
int minidx = i;
24+
for ( int j = i + 1; j < vec.size(); j++ )
25+
{
26+
if ( vec[minidx] > vec[j] )
27+
{
28+
minidx = j;
29+
}
30+
}
31+
32+
swap( vec[i], vec[minidx] );
33+
}
34+
}
35+
36+
37+
int main( void )
38+
{
39+
vector<int> vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
40+
printvec( vec );
41+
selectsort( vec );
42+
printvec( vec, "after insert sort" );
43+
return(0);
44+
}

0 commit comments

Comments
 (0)