#include
#include
using namespace std;
void merge( vector& a, int first, int mid, int last )
{
vector s1 = { a.begin() + first, a.begin() + mid };
vector s2 = { a.begin() + mid + 1, a.begin() + last };
int i = 0; int j = 0; int k = 0;
int len1 = mid - first + 1;
int len2 = last - mid;
for (; ( i < len1 ) && ( j <= len2 ); ++k)
{
if (s1[ i ] < s2[ j ])
a[ k ] = s1[ i++ ];
else
a[ k ] = s2[ j++ ];
}
while (i++ < len1)
a[ k++ ] = s1[ i ];
while (j++ < len2)
a[ k++ ] = s2[ j ];
}
void mergesort( vector& a, int first, int last )
{
if (first < last)
{
int mid = ( first + last ) / 2;
mergesort( a, first, mid );
mergesort( a, mid + 1, last );
merge( a, first, mid, last );
}
}
int main()
{
vector a = { 3, 44, 38, 5, 47, 25, 36, 26, 27, 2, 46, 4, 5, 50,99 };
mergesort( a, 0, a.size()-1 );
for (auto i : a)
cout << i<<" ";
cout << endl;
return 0;
}
刚学的归并排序
调试看不懂哪里有问题
程序输出什么地方不对?有没有仔细调试?
感觉好像是
vector s1 = { a.begin() + first, a.begin() + mid };
vector s2 = { a.begin() + mid + 1, a.begin() + last };
这里没有初始化成功
先看能不能编译,然后设置断点,自己跟踪调试一下
有错误提示
错误 1 error C2440: “初始化”: 无法从“std::_Vector_iteratorstd::_Vector_val<std::_Simple_types<int>>”转换为“std::vector>” c:\users\thinkpad\documents\visual studio 2013\projects\test00\test00\test1.cpp 8 1 test00
代码都不对。你不能直接在集合上面改,应该再定义一个临时集合
参考:
http://blog.csdn.net/morewindows/article/details/6678165
我已经找到原因了多谢各位