#include <iostream>
#include <vector>
using namespace std;
void merge_sort(vector<int> &vec, int left, int right, int mid)
{
int i = left; //左指针
int j = mid+1;//右指针
int t = 0;
vector<int> temp(right - left + 1);
while (i <= mid&&j <= right)
{
if (vec[i] <= vec[j])
temp[t++] = vec[i++];
else
temp[t++] = vec[j++];
}
while (i<=mid)
temp[t++] = vec[i++];
while (j<=right)
temp[t++] = vec[j++];
t = 0;
while (left <= right)
vec[left++] = temp[t++];
}
void merge(vector<int> &vec, int left, int right)
{
if (left < right)
{
int mid = (left + right) / 2;
merge(vec, left, mid);
merge(vec, mid + 1, right);
merge_sort(vec, left, right, mid);
}
}
int main()
{
vector<int> vec = { 7, 9, 4, 3, 0, 2, 1, 5 };
merge(vec, 0, vec.size() - 1);
for (auto it : vec)
cout << it << " ";
return 0;
}
归并排序得时间复杂度 最好,最坏,平均都是O(nlogn) ,空间复杂度为O(n)