C++ 使用C+中的列表进行快速排序+;
我正在比较不同的数据结构如何影响算法的性能。我试图让“列表”数据结构与快速排序一起工作。然而,当我尝试运行它时,我的应用程序崩溃,并给出错误“列表迭代器不可撤销”。有人知道会出什么问题吗?很可能存在某种迭代问题,因为我对它非常不熟悉C++ 使用C+中的列表进行快速排序+;,c++,list,data-structures,iterator,quicksort,C++,List,Data Structures,Iterator,Quicksort,我正在比较不同的数据结构如何影响算法的性能。我试图让“列表”数据结构与快速排序一起工作。然而,当我尝试运行它时,我的应用程序崩溃,并给出错误“列表迭代器不可撤销”。有人知道会出什么问题吗?很可能存在某种迭代问题,因为我对它非常不熟悉 void quickSortList(List& arr, int left, int right, int trialnr) {// prepare iterators list<int>::iterator i = arr.begin
void quickSortList(List& arr, int left, int right, int trialnr)
{// prepare iterators
list<int>::iterator i = arr.begin();
while(*i != left)
{
i++;
}
list<int>::iterator j = arr.end();
while (*j != right)
{
j--;
}
int pivot = *i + *j / 2;
// inititate partitioning while the values on both left and right are not equal
while (*i <= *j)
{
while (*i < pivot)
{
i++;
}
while (*j > pivot)
{
j--;
}
if (*i <= *j)
{
// while partitioning is in process, swap the corresponding arrays
swap(i, j);
i++;
j--;
}
}
// repeat the process until the array is sorted
if (left < *j)
{
quickSortList(arr, left, right, trialnr);
}
if (*i < right)
{
quickSortList(arr, left, right, trialnr);
}
}
void quickSortList(列表&arr、int-left、int-right、int-trialnr)
{//准备迭代器
列表::迭代器i=arr.begin();
而(*i!=左)
{
i++;
}
列表::迭代器j=arr.end();
而(*j!=右)
{
j--;
}
int pivot=*i+*j/2;
//初始化分区,而左侧和右侧的值不相等
而(*i轴)
{
j--;
}
如果(*i)什么是left
和right
?以及您不使用的trialnr
?有太多问题需要正确的答案。我认为您将索引与元素混淆了。请改为对列表进行排序(您肯定将迭代器与元素混淆)。您正在取消对end()
迭代器的引用(while(*j!=right)
)很抱歉,trialnr不应该再出现了,我犯了一个错误…左侧和右侧指的是列表的最外面的值(最初只是list.begin()/list.end()的值)@0x499602D2这是什么意思?我在想,也许我可以把迭代器作为变量传递给函数,而不是整数?我已经确信,通过列表解决这个算法非常不方便……也许我应该重新思考并重新启动这个问题——也许关闭这个线程,看看有多远我可以从新获得的知识中得到答案。什么是左
和右
?以及您不使用的试验?有太多问题需要正确回答。我认为您将索引与元素混淆了。请改为排序列表
。(您肯定将迭代器与元素混淆了。)您正在取消引用end()
迭代器(while(*j!=right)
)很抱歉,trialnr不应该再存在了我犯了一个错误…左侧和右侧引用列表的最外层值(最初只是list.begin()/list.end()的值)@0x499602D2这是什么意思?我在想,也许我可以把迭代器作为变量传递给函数,而不是整数?我已经确信,通过列表解决这个算法非常不方便……也许我应该重新思考并重新启动这个问题——也许关闭这个线程,看看有多远我能接受新获得的知识。