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

Browse files
daliang111willrlzhangmaolonglong
authored
feat: selection sort, merge sort in cpp (#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‎

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

Lines changed: 82 additions & 4 deletions
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‎

Lines changed: 49 additions & 0 deletions
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
## 算法分析
Lines changed: 44 additions & 0 deletions
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)

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