归并排序的c++实现
#include <iostream>
#include <vector>
#include <memory>
#include <ctime>
#include <random>
using namespace std;
void merge(vector<int> &vec, int p, int q, int r)
{
int LEFT_SIZE = q - p + 1;
int RIGHT_SIZE = r - q;
vector<int> *lef = new vector<int>;
vector<int> *rig = new vector<int>;
shared_ptr<vector<int>> left(lef);
shared_ptr<vector<int>> right(rig);
for (int i = 0; i < LEFT_SIZE; i++)
left->push_back(vec.at(p + i));
for (int i = 0; i < RIGHT_SIZE; i++)
right->push_back(vec.at(q + i + 1));
left->push_back(9999999);
right->push_back(9999999);
int i = 0;
int j = 0;
int k;
for (k = p; k < r + 1; k++)
{
if (left->at(i) <= right->at(j))
{
vec[k] = left->at(i);
i++;
}
else
{
vec[k] = right->at(j);
j++;
}
}
}
void mergeSort(vector<int> &vec, int p, int r)
{
if (p == r)
return;
int q = 0;
q = (p + r) / 2;
mergeSort(vec, p, q);
mergeSort(vec, q + 1, r);
merge(vec, p, q, r);
}
int main(int argc, char const *argv[])
{
srand(time(NULL));
vector<int> vec(8);
for (int i = 0; i < 8; i++)
vec[i] = rand() % 100 + 1;
cout << "排序前:" << endl;
for (auto ele : vec)
cout << ele << ",";
cout << endl;
mergeSort(vec, 0, vec.size() - 1);
cout << "排序后:" << endl;
for (int &ele : vec)
cout << ele << ",";
return 0;
}