void merge(vector<int> dst,vector<int> first,vector<int> second)
{
int i=0,j=0;
while(i<first.size()&&j<second.size())
{
if(first[i]<second[j])
{
dst.push_back(first[i]);
i++;
}
else
{
dst.push_back(second[j]);
j++;
}
}
while(i<first.size()
dst.push_back(first[i++]);
while(j<second.size())
dst.push_back(second[j++]);
}
void mergeSort(vector<int> &a)
{
size_t sz = a.size();
cin.get();
if(sz>1)
{
vector<int> first(&a[0],&a[sz/2]);
vector<int> second(&a[(sz/2)+1],&a[sz-1]);
mergeSort(first);
mergeSort(second);
merge(a,first,second);
}
}
void MergeSort(int* a,size_t size)
{
vector<int> s(&a[0],&a[size-1]);
mergeSort(s);
}
有人能帮助我这个代码有什么问题吗?我得到矢量下标超出范围错误。为什么我在合并排序中得到向量下标超出范围错误?
你为什么在第一个和第二个数组中都传递st + sz/2?另外为什么使用]它可能会给编译器错误权利? – brett 2010-08-25 08:45:57
@brett:是的']'是一个剪切和粘贴错误。 – 2010-08-25 08:51:53
@brett:一个向量的构造函数需要两个迭代器。他们指向第一个元素,并且指向最后一个元素。因此,我们通过'st + sz/2'这个向量'第一',这是一个超过结尾的值,因此应该等于第二个向量'st + sz/2'中的第一个元素。 – 2010-08-25 08:53:56