Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions basic/sorting/MergeSort/Main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#include <iostream>
#include <vector>

using namespace std;

void printvec( const vector<int> &vec, const string &strbegin = "", const string &strend = "" )
{
cout << strbegin << endl;
for ( auto val : vec )
{
cout << val << "\t";
}

cout << endl;
cout << strend << endl;
}


void mergesort( vector<int> & vec, int left, int right )
{
if ( left >= right )
{
return;
}

int mid = left + (right - left) / 2;
mergesort( vec, left, mid );
mergesort( vec, mid + 1, right );

int i = left;
int j = mid + 1;
int k = 0;
vector<int> vecTmp;
while ( i <= mid && j <= right )
{
if ( vec[i] < vec[j] )
{
vecTmp.push_back( vec[i] );
i++;
}else {
vecTmp.push_back( vec[j] );
j++;
}
}

while ( i <= mid )
{
vecTmp.push_back( vec[i] );
i++;
}

while ( j <= right )
{
vecTmp.push_back( vec[j] );
j++;
}

for ( int i = left; i <= right; i++ )
{
vec[i] = vecTmp[i - left];
}

return;
}


int main( void )
{
vector<int> vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
printvec( vec );
mergesort( vec, 0, vec.size() - 1 );
printvec( vec, "after insert sort" );
return(0);
}
86 changes: 82 additions & 4 deletions basic/sorting/MergeSort/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ def merge_sort(nums, left, right):
while j <= right:
tmp.append(nums[j])
j += 1

j = 0
for i in range(left, right + 1):
nums[i] = tmp[j]
Expand All @@ -119,7 +119,7 @@ import java.util.Scanner;

public class Main {
private static int[] tmp = new int[100010];

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Expand All @@ -132,7 +132,7 @@ public class Main {
System.out.printf("%d ", nums[i]);
}
}

public static void mergeSort(int[] nums, int left, int right) {
if (left >= right) {
return;
Expand Down Expand Up @@ -179,7 +179,7 @@ function mergeSort(nums, left, right) {
if (left >= right) {
return;
}

const mid = (left + right) >> 1;
mergeSort(nums, left, mid);
mergeSort(nums, mid + 1, right);
Expand Down Expand Up @@ -272,5 +272,83 @@ func main() {
}
```

### **C++**

```cpp
#include <iostream>
#include <vector>

using namespace std;

void printvec( const vector<int> &vec, const string &strbegin = "", const string &strend = "" )
{
cout << strbegin << endl;
for ( auto val : vec )
{
cout << val << "\t";
}

cout << endl;
cout << strend << endl;
}


void mergesort( vector<int> & vec, int left, int right )
{
if ( left >= right )
{
return;
}

int mid = left + (right - left) / 2;
mergesort( vec, left, mid );
mergesort( vec, mid + 1, right );

int i = left;
int j = mid + 1;
int k = 0;
vector<int> vecTmp;
while ( i <= mid && j <= right )
{
if ( vec[i] < vec[j] )
{
vecTmp.push_back( vec[i] );
i++;
}else {
vecTmp.push_back( vec[j] );
j++;
}
}

while ( i <= mid )
{
vecTmp.push_back( vec[i] );
i++;
}

while ( j <= right )
{
vecTmp.push_back( vec[j] );
j++;
}

for ( int i = left; i <= right; i++ )
{
vec[i] = vecTmp[i - left];
}

return;
}


int main( void )
{
vector<int> vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
printvec( vec );
mergesort( vec, 0, vec.size() - 1 );
printvec( vec, "after insert sort" );
return(0);
}
```

<!-- tabs:end -->
49 changes: 49 additions & 0 deletions basic/sorting/SelectionSort/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,55 @@ func main() {
}
```

### **C++**

```cpp
#include <iostream>
#include <vector>

using namespace std;

void printvec( const vector<int> &vec, const string &strbegin = "", const string &strend = "" )
{
cout << strbegin << endl;
for ( auto val : vec )
{
cout << val << "\t";
}

cout << endl;
cout << strend << endl;
}


void selectsort( vector<int> & vec )
{
for ( int i = 0; i < vec.size() - 1; i++ )
{
int minidx = i;
for ( int j = i + 1; j < vec.size(); j++ )
{
if ( vec[minidx] > vec[j] )
{
minidx = j;
}
}

swap( vec[i], vec[minidx] );
}
}


int main( void )
{
vector<int> vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
printvec( vec );
selectsort( vec );
printvec( vec, "after insert sort" );
return(0);
}
```

<!-- tabs:end -->

## 算法分析
Expand Down
44 changes: 44 additions & 0 deletions basic/sorting/SelectionSort/SelectionSort.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#include <iostream>
#include <vector>

using namespace std;

void printvec( const vector<int> &vec, const string &strbegin = "", const string &strend = "" )
{
cout << strbegin << endl;
for ( auto val : vec )
{
cout << val << "\t";
}

cout << endl;
cout << strend << endl;
}


void selectsort( vector<int> & vec )
{
for ( int i = 0; i < vec.size() - 1; i++ )
{
int minidx = i;
for ( int j = i + 1; j < vec.size(); j++ )
{
if ( vec[minidx] > vec[j] )
{
minidx = j;
}
}

swap( vec[i], vec[minidx] );
}
}


int main( void )
{
vector<int> vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
printvec( vec );
selectsort( vec );
printvec( vec, "after insert sort" );
return(0);
}