//复杂度O(nlogn),需要辅助空间
#include<iostream>
#include<vector>
void merge(std::vector<int>& src, std::vector<int>& dst, int start, int mid, int end)
{
int k = start;
int i = start;
int j = mid + 1;
for (; (j <= end) && (i <= mid); )
{
if (src[i] >= src[j])
{
dst[k++] = src[j++];
}
else
{
dst[k++] = src[i++];
}
}
while(j <= end) dst[k++] = src[j++];
while(i <= mid) dst[k++] = src[i++];
}
void sortMerg(std::vector<int>& src, std::vector<int>& dst, int start, int end)
{
if (start >= end)
{
//dst[start] = src[start];
return;
}
int mid = (start + end)/2;
sortMerg(src, dst, start, mid);
sortMerg(src, dst, mid + 1, end);
merge(src, dst, start, mid, end);
//src.swap(dst);
std::copy(dst.begin() + start, dst.begin() + end + 1, src.begin() + start);
}
int main(int argc, char *argv[])
{
std::vector<int> src{10, 1, 5, 3, 6, 4, 2, 8, 7, 9};
std::vector<int> dst(src.size(), 0);
sortMerg(src, dst, 0, src.size() - 1);
for (int i = 0; i < dst.size(); i++)
{
std::cout<<src[i]<<std::endl;
}
}
归并排序
最新推荐文章于 2023-12-11 10:45:47 发布