#include <iostream>
#include <vector>
using namespace std;
//归并排序
//算法时间复杂度 O(N*logN)
//算法额外空间复杂度 O(N)
void Merge(vector <int> &num_s, int left, int mid, int right)
{
vector <int> num_s0;
int p = left;
int q = mid + 1;
int k = 0;
while (p <= mid && q <= right)
if(num_s[p] <= num_s[q])
num_s0.push_back(num_s[p++]);
else
num_s0.push_back(num_s[q++]);
while (p <= mid)
num_s0.push_back(num_s[p++]);
while (q <= right)
num_s0.push_back(num_s[q++]);
p = left;
while (k < num_s0.size())
num_s[p++] = num_s0[k++];
}
void Mergesort(vector <int> &num_s, int left, int right)
{
if(left == right)
return ;
int mid = (left + right) / 2;
Mergesort(num_s, left, mid);
Mergesort(num_s, mid + 1, right);
Merge(num_s, left, mid, right);
}
void Merge_Sort(vector <int> &num_s)
{
if (num_s.size() == 1)
return ;
int left = 0, right = num_s.size() - 1;
Mergesort(num_s, left, right);
}
int main()
{
int num;
vector <int> num_s;
while(cin >> num)
num_s.push_back(num);
cout << "the original data is: " << endl;
for (int i = 0; i < num_s.size(); i++)
cout << num_s[i] << ' ';
Merge_Sort(num_s);
cout << endl << "Merge_sort" << endl;
for(int i = 0; i < num_s.size(); i++)
cout << num_s[i] << ' ';
system("pause");
return 0;
}
C++排序(4)——归并排序
猜你喜欢
转载自blog.csdn.net/Cris_7/article/details/82836646
今日推荐
周排行