我需要实现 MergeSort 以使用向量迭代器对整数向量进行排序。我实现了它,但我收到了这个错误:Vector iterator not dereferencable。
作为合并排序函数的参数,我使用 (A.begin(),A.end()) 其中 A 是包含 n 个元素的向量。
#include <iostream>
#include <vector>
using namespace std;
void swap(vector<int>::iterator first,vector<int>::iterator last)
{
int temp;
temp=*first;
*first=*last;
*last=temp;
return;
}
void mergesort(vector<int>::iterator first,vector<int>::iterator last)
{
if(first==last) return;
if(first+1==last)
{
if(*last>*first) swap(first,last);
return;
}
vector<int>::iterator middle;
middle=first+(last-first)/2;
mergesort(first,middle);
mergesort(middle+1,last);
int a,b,pa,pb;
vector<int> h;
//the number of elements in a
pa=middle-first+1;
//the number of elements in b
pb=last-middle;
h.resize(pa+pb);
a=0; b=0;
while(a<pa && b<pb)
if(*(first+a)<*(middle+1+b))
{
h[a+b]=*(first+a); a++;
}
else
{
h[a+b]=*(middle+1+b); b++;
}
while(a<pa)
{
h[a+b]=*(first+a); a++;
}
while(b<pb)
{
h[a+b]=*(middle+1+b); b++;
}
for(int i=0;i<((a+b)-1);i++)
*(first+i)=h[i];
return;
}
int main(){
vector<int>A;
for(int i=1000;i>0;i--)
{
A.push_back(i);
//vector of integer: 1000,999,998 ... 3,2,1
}
mergesort(A.begin(),A.end());
//sort vector elements from smallest to biggest: 1,2,3...998,999,1000
system("pause");
return 0;
}